Pra*_*nth 6 c# concurrency asynchronous async-await
public async Task<List<string>> getAllQueries()
{
List<string> allQueries = new List<string>();
for (int i =0 ; i < 10; i++)
{
List<string> queries = await getQueriesForId(i);
allQueries.AddRange(queries);
}
return allQueries;
}
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题吗?我没有得到正确的结果。我对异步/等待不太了解。我观察到该函数返回列表,但没有合并所有并发调用的结果。有人可以让我知道如何合并来自所有并发调用的列表然后仅返回吗?
我将使用该Task.WhenAll方法并在结果全部实现后将其合并,请考虑以下事项:
public async Task<List<string>> GetAllQueriesAsync()
{
var tasks =
Enumerable.Range(0, 10)
.Select(i => GetQueriesForIdAsync(i));
await Task.WhenAll(tasks);
return tasks.SelectMany(t => t.Result).ToList();
}
Run Code Online (Sandbox Code Playgroud)
在下面的代码片段中,我做了几个关键的更改。
Task和返回方法Task<T>Enumerable.Range而不是for循环
IEnumerable<Task<List<string>>>| 归档时间: |
|
| 查看次数: |
6606 次 |
| 最近记录: |