我使用以下方法异步并同时执行某些任务:
public async Task<Dictionary<string, object>> Read(string[] queries)
{
var results = queries.Select(query => new Tuple<string, Task<object>>(query, LoadDataAsync(query)));
await Task.WhenAll(results.Select(x => x.Item2).ToArray());
return results
.ToDictionary(x => x.Item1, x => x.Item2.Result);
}
Run Code Online (Sandbox Code Playgroud)
我希望该方法同时调用LoadDataAsync数组中的每个字符串,然后等待所有任务完成并返回结果.
LoadDataAsync为每个项调用两次,一次await ...在行,一次在最后一个.Result属性getter.await ...行,Visual Studio会警告我整个方法将并行运行,因为await该方法内部没有调用.我究竟做错了什么?
是否有更好(更短)的方法来做同样的事情?