【发布时间】:2015-09-03 21:59:48
【问题描述】:
在我的应用程序中,我有一个文本区域,用户可以在其中输入多个 url(通常是 1000 左右的数字)。
对于每个 url,我以这种方式触发一个 http 请求:
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
问题:
url 服务器经常处于离线状态,这意味着request.GetResponse() 将挂起request.Timeout 毫秒。
我需要系统不要站在那里等待超时;相反,我想利用空闲时间在某个请求等待响应时触发剩余的请求。
我的解决方案 我虽然关于在不同的任务中分派每个请求 因此,我的解决方案如下所示:
Task[] tasks = new Task[numberOfUrls];
for (int i = 0; i < numberOfUrls; ++i)
{
int index = i;
tasks[index] = Task.Factory.StartNew(() => Request(urls[index]));
}
Task.WaitAll(tasks);
问题:解决这个问题的正确方法是什么?
我不确定我的方法是否正确,因为在阅读了很多关于整个 C# 异步/多线程/并行机制的材料(我不太熟悉)之后,我真的很困惑。 在这一点上,我不确定我是异步执行此操作还是使用多个线程或其他方式。 我阅读了一些建议,我应该创建触发请求的方法async,然后他们调用它并await。但是后来我也发现有人说它不会利用并行性等等。
我预测人们会将其标记为基于意见,但我敦促您更加努力地思考,因为它确实不是:它是关于根据框架的工作方式和应该使用的方式正确使用框架。
【问题讨论】:
标签: c# multithreading httprequest task