相关疑难解决方法(0)

异步任务被评估两次

我使用以下方法异步并同时执行某些任务:

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该方法内部没有调用.

我究竟做错了什么?

是否有更好(更短)的方法来做同样的事情?

.net c# async-await

8
推荐指数
2
解决办法
2566
查看次数

标签 统计

.net ×1

async-await ×1

c# ×1