【发布时间】:2016-02-16 20:00:16
【问题描述】:
我有一段代码如下所示:
var taskList = new Task<string>[masterResult.D.Count];
for (int i = 0; i < masterResult.D.Count; i++) //Go through all the lists we need to pull (based on master list) and create a task-list
{
using (var client = new WebClient())
{
Task<string> getDownloadsTask = client.DownloadStringTaskAsync(new Uri(agilityApiUrl + masterResult.D[i].ReferenceIdOfCollection + "?$format=json"));
taskList[i] = getDownloadsTask;
}
}
Task.WaitAll(taskList.Cast<Task>().ToArray()); //Wait for all results to come back
代码在 Task.WaitAll 之后冻结...我知道为什么,这是因为客户端在调用时已经被处理,是否可以将其处理延迟到以后?你能推荐另一种方法吗?
【问题讨论】:
-
好吧,测试假设:当
using围绕其他所有东西移动时会发生什么?这是确认还是拒绝“想法”? -
它是否在异步函数中运行?它是否一直“向上”异步?
-
外码是什么?重要的是它在调用堆栈中一直是异步的。
-
不,函数是同步的
-
外部方法可能是不相关的(绝对不是异步的),因为调用了
Task.WaitAll。