我有一个用 .NET 4 编写的 Windows 服务,它创建多个线程,其中包含无限运行的 while(running) 循环。当我停止服务时,正在运行的布尔值变为 false,我们跳出 while 循环,一旦每个线程都这样做,服务最终会停止。
在此期间,它调用 oMessageReceiver.Receive(TimeSpan.FromSeconds(30))。所以有时当我尝试停止服务时,我必须等待 30 秒才能让 Receive() 进程超时。
一种选择是将超时时间从 30 秒降低到更小。我不确定它会招致什么样的性能损失,但由于没有 BrokeredMessage,该过程不会做任何工作,我真的希望尽可能长时间地保持监听器打开。
我看到 MessageReceiver 上有一个 .BeginReceive() 方法。我有一种感觉,我可以在这里使用一种编程模式,它可以防止我的服务在我等待接收超时时挂起。谁能描述如何在无限运行的 Windows 服务中使用 Begin/End APM 功能?