【发布时间】:2016-10-03 23:46:38
【问题描述】:
我依稀记得有一个属性告诉我们一个任务是否同步执行,但我刚才记不住了。或者可能没有,我将IAsyncResult.CompletedSynchronously 与这个混淆了?
【问题讨论】:
标签: c# .net asynchronous async-await task-parallel-library
我依稀记得有一个属性告诉我们一个任务是否同步执行,但我刚才记不住了。或者可能没有,我将IAsyncResult.CompletedSynchronously 与这个混淆了?
【问题讨论】:
标签: c# .net asynchronous async-await task-parallel-library
检查这个:Task.IAsyncResult.CompletedSynchronously Property
它的描述看起来很像答案:
获取操作是否同步完成的指示。
为了检查属性值,您必须将 Task 转换为 IAsyncResult,因为 Task 明确实现了它。
bool? result = (myTask as IAsyncResult)?.CompletedSynchronously;
您可以使用扩展方法代替显式转换:WindowsRuntimeSystemExtensions.AsAsyncOperation 定义在 System 命名空间中:
bool result = myTask.AsAsyncOperation().CompletedSynchronously;
正如评论中合理指出的那样,尽管当前property implementation 中有一个插科打诨。自 2016 年 10 月 1 日起,它始终返回 false。这可能会发生变化。
【讨论】:
Task 是一种异步操作,我认为它并不意味着同步完成。这就是属性实现总是返回false 的原因。至于Task.RunSynchronously 方法,我认为它是如此奇特,以至于MS 家伙都不愿意过多关注它。由于 .NET 开发现在是开源的,但您始终可以提交问题。如果您真的有兴趣,可以去:github.com/dotnet/corefx