【发布时间】:2015-08-06 20:57:35
【问题描述】:
我有以下情况(或对异步等待机制的基本误解)。
假设您有一组需要很长时间的 1-20 个 Web 请求调用:findItemsByProduct()。
您想将它包装在一个异步请求中,这样就能够将所有这些调用抽象为一个异步调用,但如果不使用更多线程,我似乎无法做到这一点。
如果我在做:
int total = result.paginationOutput.totalPages;
for (int i = 2; i < total + 1; i++)
{
await Task.Factory.StartNew(() =>
{
result = client.findItemsByProduct(i);
});
newList.AddRange(result.searchResult.item);
}
}
return newList;
这里的问题是,呼叫不会一起运行,而是一个接一个地等待。 我希望所有的调用一起运行,而不是收获结果。
作为伪代码,我希望代码像这样运行:
forEach item {
result = item.makeWebRequest();
}
foreach item {
List.addRange(item.harvestResults);
}
我不知道如何编写代码来做到这一点..
【问题讨论】:
-
您从哪里想到使用
Task.Factory.StartNew? -
您的数据访问组件是否有任何异步方法可以用来异步实现
findItemsByProduct? -
如果您想同时(并发)运行多个操作,您实际上是在问如何并行运行它们,这是与异步不同(但互补)的想法代码。
标签: c# .net asynchronous task async-await