Task.WhenAll 之后的 .Result 或等待

Yga*_*bel 3 c# asynchronous task

我有两个任务,我等待它们完成

await Task.WhenAll

之后直接调用获取值会不会有问题.Result

我确信任务已经完成。

`

        Task<int> t1 = Task.FromResult(1);
        Task<int> t2 = Task.FromResult(2);
        await Task.WhenAll(t1, t2);
        var uuu = t1.Result; 
        // or var uuu = await t1;
Run Code Online (Sandbox Code Playgroud)

`

问题是 Visual Studio 设置了VSTHRD103 Call async methods when in an async method警告。

我检查了一下sharplab,结果版本 jit 有点小。

.Result如果我已经用 等待他们之后再打电话,我会遇到僵局吗Task.WhenAll

Pan*_*vos 6

没有问题,因为任务已经完成了。这是一个误报,可以忽略。

如果所有任务返回相同的结果,Task.WhenAll将返回一个包含结果的数组:

var results=await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)

结果的顺序与产生它们的任务的顺序相同

  • 我同意这个答案——等待任务后使用“.Result”是完全可以的。我唯一要补充的是,再次“等待”也是可以的,这会给你相同的结果,并且可能更安全。 (2认同)