Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使.NET4线程等待异步请求完成?_C#_Asp.net_.net 4.0 - Fatal编程技术网

C# 如何使.NET4线程等待异步请求完成?

C# 如何使.NET4线程等待异步请求完成?,c#,asp.net,.net-4.0,C#,Asp.net,.net 4.0,我使用HttpWebRequest.BeginGetRequest()从单个方法发出500个异步HTTP请求。我希望该方法等待所有请求的响应,否则它们将超时 最好的方法是什么 我目前正在将异步调用包装在任务对象列表中,以使用Tasks.WaitAll(),但在我知道这是一个好的解决方案之前,我不想走得太远 有什么想法吗 编辑 我实现了计数器,它们可以工作,但我很好奇如何使用如本页所示的委托 以前有人做过这样的事吗?这是不是太过分了?我个人不会阻止线程,它违背了异步模型的目的 如果在继续之前我必

我使用HttpWebRequest.BeginGetRequest()从单个方法发出500个异步HTTP请求。我希望该方法等待所有请求的响应,否则它们将超时

最好的方法是什么

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

有什么想法吗

编辑

我实现了计数器,它们可以工作,但我很好奇如何使用如本页所示的委托


以前有人做过这样的事吗?这是不是太过分了?

我个人不会阻止线程,它违背了异步模型的目的

如果在继续之前我必须等待这些web请求完成,那么我会保留一个计数器,每当成功或失败的请求被回调时,该计数器都会递增

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

通过这种方式,您还可以保持您的UI良好且响应迅速,或许还可以更新计数器/进度条-即使您没有在UI线程上启动这些功能,也可以为用户提供一些有关正在发生的事情的可视化反馈

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


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

感谢您的反馈。我想我可以很容易地实现计数器。我不关心UI的响应性,因为这是一个一次性的解决方案。它基本上是一个web服务,当被调用时,它查询一组主机,解析响应,然后将该响应放入数据库。这假设管理异步任务的调用线程必须是UI线程。最好让UI线程生成一个异步任务来管理所有其他线程并报告它们的进度,而不是让UI逻辑负担太重。@Tyler说:“就我个人而言,我不会阻止线程,它违背了异步模型的目的。”有时你必须等待所有线程完成,例如在控制台应用程序中。如果控制台应用程序立即退出,那么所有这些线程都会立即死亡,而不会完成。