我有一个可以同时处理多个查询的网络服务。每个查询通过将id
传递给某个执行程序来启动异步任务,如下所示:
Executor.Start(id).
Start(string)
立即返回。在某些时候,执行器通过回调发出信号,表明已完成具有某个id的任务。但我需要等到查询启动的任务完成后,才能在该Web服务发送响应之后。怎么实现这个?
是否可以为每个查询创建ManualResetEvent
,将其添加到某个跟踪器,并在完成具有相应ID的任务时调用Set()
?可以存储数百个ManualResetEvent
的集合吗?我可以这样写:
if (!manualResetEvent.WaitOne(100000))
{
}
答案 0 :(得分:0)
根据您的评论(查询不相关,只是独立完成)
是的,您可以使用ManualResetEvents。
更好的设计(从Web应用程序的角度来看)是立即返回并使用java脚本计时器,不时检查作业的状态并报告结果。这样,网页保持响应,如果服务器支持,您甚至可以允许用户取消查询。