Amo*_*n17 5 .net c# asynchronous servicebus
我有一个用.NET 4编写的Windows服务,它创建了包含无限运行while(运行)循环的多个线程.当我停止服务时,运行的布尔值变为false,我们打破了while循环,一旦每个线程都这样做,服务终于停止了.
在while内部,它调用oMessageReceiver.Receive(TimeSpan.FromSeconds(30)).因此,有时当我尝试停止服务时,我必须等待30秒才能使Receive()进程超时.
一种选择是将超时从30秒降低到更小.我不确定它会产生什么性能损失,但是由于没有BrokeredMessage这个过程没有做任何工作,所以我真的希望尽可能经常地让听众保持开放状态.
我看到MessageReceiver上有一个.BeginReceive()方法.我有一种感觉,我可以在这里使用的编程模式可以防止我的服务在我等待接收超时时挂起.任何人都可以描述如何在无限运行的Windows服务中使用Begin/End APM功能吗?
关闭从中创建 MessageReceiver 的 MessageFactory 以取消接收操作。在关闭消息工厂之前在 MessageReceiver 上调用 Abort 或 Close 时,我遇到了同样的问题。
使用异步开始/结束不会有什么区别。作为旁注,如果您想异步运行,请考虑使用TaskFactory.FromAsync创建任务包装器以利用新的异步等待功能。
另请参阅我对同一问题的回答:
取消 Azure 服务总线 QueueClient 长时间运行的接收吗?
归档时间: |
|
查看次数: |
1527 次 |
最近记录: |