IsCompleted 中等待的任务 return false 可以吗

Can an awaited Task return false in IsCompleted

我找到了这段代码:

Task task = DoSomethingAsync( someObject );
await task.ConfigureAwait( false );
if ( task.IsCompleted ){ ... }

我想知道我是否可以安全地将它替换为

await DoSomethingAsync( someObject ).ConfigureAwait( false );

并删除 if 子句。

我的问题:当等待的任务返回时,task.IsCompleted 是否可以为 false?

documentation of IsCompleted 告诉我们:

true if the task has completed (that is, the task is in one of the three final states: RanToCompletion, Faulted, or Canceled); otherwise, false.

我查找了可能的states,但我仍然不清楚当等待的任务返回时哪些状态是可能的。

请帮我解释一下这个问题。提前谢谢。

Docs: await operator (C# reference)

The await operator suspends evaluation of the enclosing async method until the asynchronous operation represented by its operand completes.

Task taskInstance = ...; await taskInstance;之后,taskInstance.IsCompleted将永远为真。

基于这篇文章: https://profinit.eu/en/blog/lets-dive-into-async-await-in-c-part-3/ 您发现的示例是一种不好的方法。所以你可以安全地使用版本:

await DoSomethingAsync( someObject ).ConfigureAwait( false );

您可以省略 ConfigureAwait(false),但取决于您使用该方法的上下文 DoSomethingAsync