繁体   English   中英

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

[英]How do I make a .NET 4 thread wait for asynchronous requests to finish?

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

做这个的最好方式是什么?

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

有任何想法吗?

编辑

我实现了计数器,并且它们可以工作,但是我对使用此页面上所示的委托感到好奇。

多线程和异步示例

有人做过这样的事吗? 是过度杀伤力吗?

我目前正在将异步调用包装在Task对象列表中以使用Tasks.WaitAll()

如果您确实要在此时强制这些“任务”进行同步和阻止,那么这是一个非常干净的解决方案。 这是Task.WaitAll()背后的主要原理,它很不错,因为它(可选)允许您在超时后取消阻止操作(如果您选择这样做)。

我个人不会阻塞线程,它违反了异步模型的目的。

如果我绝对必须等待这些Web请求完成才能继续,我将保留一个计数器,每次成功或失败的请求被调用时,该计数器都会递增。

检查每个回调上的计数器,如果它已达到所需的计数,则让线程继续...

这样,您还可以使UI保持良好的响应状态,并可能更新计数器/进度条-即使您没有在UI线程上启动这些按钮,也可以向用户提供有关正在发生的事情的直观反馈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM