如何知道任务是否同步完成?

Wat*_* v2 5 .net c# asynchronous task-parallel-library async-await

我依旧记得有一个属性告诉我们一个任务是否同步执行但是我的记忆刚才让我失望.或者可能没有,我正在IAsyncResult.CompletedSynchronously和这个混在一起?

Zve*_*niy 6

检查:Task.IAsyncResult.CompletedSynchronously属性

它的描述看起来很像答案:

获取操作是否同步完成的指示.

为了检查属性值,您必须将其Task转换为into,IAsyncResult因为Task它是显式实现的.

bool? result = (myTask as IAsyncResult)?.CompletedSynchronously;
Run Code Online (Sandbox Code Playgroud)

您可以使用扩展方法代替显式转换:在命名空间中定义的WindowsRuntimeSystemExtensions.AsAsyncOperationSystem:

bool result = myTask.AsAsyncOperation().CompletedSynchronously;
Run Code Online (Sandbox Code Playgroud)

正如在评论中合理指出的那样,虽然当前的房地产实施存在堵塞.截至2016年10月1日,它总是回归false.这是一个需要改变的主题.

  • 不幸的是,MSDN在这里误导,该属性总是返回false:https://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/Task.cs,1619 (2认同)