我有这样的代码:等待任何异步方法和(事件或布尔)
ManualResetEvent EventListenerStopped;
...
while (true)
{
IAsyncResult iar = this.ListenerHttp.BeginGetContext(ProcessRequest, null);
if (WaitHandle.WaitAny(new[] { this.EventListenerStopped, iar.AsyncWaitHandle }) == 0)
return;
}
基本上它等待任何两个事件:
- 如果接收到请求时,它对其进行处理和等待下一个。
- 如果引发EventListenerStopped,它将退出循环。
这段代码现在已经很好地运行在生产中了。
我想尝试将其转换为新的await/async机制,似乎无法找到一个很好的简单方法来完成它。
我试着用一个布尔值调用者可以变成false。/
bool RunLoop;
...
while (this.RunLoop)
{
HttpListenerContext listenerContext = await this.ListenerHttp.GetContextAsync();
ProcessRequest(listenerContext);
}
我想知道如果它甚至有可能改写我简单的旧式环路与异步等待:这很明显,因为它退出新的请求已被接收后,才和处理循环不起作用。如果是的话,有人愿意告诉我如何?
您是否试图阻止侦听器而不是使用bool? – alexm
@Micky我明白他们不一样。我的观点是:有没有一种方法可以实现类似于异步/等待的方式(我很困惑地想到某种Task.WaitAny(),其中一个任务将检查某些布尔值的提升......) – user1409737
@alexm我自己没有尝试过,但是在SO上读了一些地方,不应该这样做,因为它会破坏当前处理的任何请求(并且ListenerContext对象被传递到线程池以在我的情况下进行处理...) – user1409737