我怎么能等待Task.WhenAll(...).继续(AnotherAwaitable)?

Wil*_*ill 8 c# task async-await

我有以下一点代码 -

await Task.WhenAll(TaskList /*List of Task objects*/);
await AnotherAwaitableMethod( );
Run Code Online (Sandbox Code Playgroud)

这很好,并且是必要的,因为它AnotherAwaitableMethod依赖于确保TaskList在执行之前完成任务.

但是,我希望能够说出类似的话

await Task.WhenAll(TaskList).ContinueWith( /*AnotherAwaitableMethod call?*/ );
Run Code Online (Sandbox Code Playgroud)

这可能吗?我误解了目的Task.ContinueWith吗?

Kni*_*Fox 15

  await Task.WhenAll(TaskList /*List of Task objects*/);
  await AnotherAwaitableMethod( );
Run Code Online (Sandbox Code Playgroud)

 await Task.WhenAll(TaskList /*List of Task objects*/).ContinueWith(_ => {AnotherAwaitableMethod();}).Unwrap();
Run Code Online (Sandbox Code Playgroud)

将采取几乎相同的行动.但是,如果使用其重载,使用ContinueWith会给你很大的移动能力.使用ContinueWith的主要原因之一是,您希望根据第一个任务的结果有条件地执行AnotherAwaitableMethod,或者您希望使用TaskContinuationOptions控制上下文时

  • 您可以非常轻松地等待执行第二个任务"有条件地基于第一个结果",实际上使用`ContinueWith`更加困难.此外,传递回调只会扭曲您的callstack,以防出现异常并使调试更加困难.使用像这样的回调,首先会让async/await失败. (2认同)