如何使.NET 4线程等待异步请求完成?

时间:2011-03-11 20:43:58

标签: c# asp.net .net-4.0

我正在使用HttpWebRequest.BeginGetRequest()从单个方法发出500个异步HTTP请求。我希望该方法等到我收到所有请求的响应或者超时。

这样做的最佳方式是什么?

我目前正在使用Task.WaitAll()在List of Task对象中包装异步调用,但在我知道这是一个很好的解决方案之前,我不想走得太远。 / p>

有什么想法吗?

修改

我实现了计数器,它们可以工作,但我很好奇使用本页所示的代理。

Multi-threading and Async Examples

以前有人做过这样的事吗?这有点难过吗?

2 个答案:

答案 0 :(得分:2)

  

我目前正在将一个异常调用包装在一个Task of Task对象中,以使用Tasks.WaitAll()

如果您真的想在此时强制执行这些“任务”同步和阻止,这是一个相当干净的解决方案。这是Task.WaitAll()背后的主要原理,并且很好,因为它(可选)允许您在超时后取消阻止操作,如果您愿意的话。

答案 1 :(得分:1)

我个人不会阻止该线程,它会破坏异步模型的目的。

如果我绝对不得不等待这些网络请求完成后再继续,我会保留一个计数器,每当你成功或失败的请求回叫时,计数器就会递增。

检查每个回调的计数器,如果它已达到你想要的计数,那么让线程继续......

通过这种方式,您还可以保持您的用户界面更好,更快速,也可以更新计数器/进度条 - 即使您没有在UI线程上踢这些,也很高兴为用户提供一些视觉反馈继续。