Task.WhenAll(params System.Threading.Tasks.Task[] task) 返回 Task,但是调用此方法后,获取任务结果的正确方法是什么?等待该任务后,就可以获取结果了……
Task.WhenAll(params System.Threading.Tasks.Task[] tasks)
返回 Task,但调用此方法后获取任务结果的正确方法是什么?等待该任务后,可以通过再次等待原始任务来获取结果,这应该没问题,因为任务已经完成。也可以使用 Task.Result 属性获取结果,但通常认为这不是好的做法
Task<TResult1> task1= ...
Task<TResult2> task2= ...
Task<TResult3> task3= ...
await Task.WhenAll(task1, task2, task3)
var a = task1.Result; // returns TResult1
var b = await task1; // also returns TResult1
我应该在这里选择哪一个以及为什么?
这是返回的过载 Task<TResult[]>
- MS Docs
例子:
static async Task Test()
{
List<Task<string>> tasks = new List<Task<string>>();
for (int i = 0; i < 5; i++)
{
var currentTask = GetStringAsync();
tasks.Add(currentTask);
}
string[] result = await Task.WhenAll(tasks);
}
static async Task<string> GetStringAsync()
{
await Task.Delay(1000);
return "Result string";
}