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
。
我找到了这段代码:
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
。