编程语言
首页 > 编程语言> > c# – 如何取消Microsoft ServiceBus MessageReceiver Receive调用?

c# – 如何取消Microsoft ServiceBus MessageReceiver Receive调用?

作者:互联网

我有一个用.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时遇到了同样的问题.

使用异步Begin / End将没有任何区别.
作为旁注,如果要异步运行,请考虑使用TaskFactory.FromAsync创建Task包装器以利用新的async-await功能.

另请参阅我对此问题的答案:

Cancel an Azure Service Bus QueueClient long running Receive?

标签:c,asynchronous,net,servicebus
来源: https://codeday.me/bug/20190517/1121898.html