【发布时间】:2017-05-20 20:56:46
【问题描述】:
假设我有一个方法
async Task<int> GetStackOverflowAsync()
{
Task<int> longRunningCpuBoundTask = Task<int>.Run(() =>
{
// some long-running CPU-bound task that returns an int
})
.ConfigureAwait(continueOnCapturedContext: true);
return await longRunningCpuBoundTask;
}
假设捕获的上下文是一个需要int 的 UI 线程。所以我知道Task.Run 将长时间运行的 CPU 绑定任务卸载到另一个线程,但我想知道哪个线程检查该任务的完成情况。
我想象会发生什么
UI 线程 |- 做 UI 的东西 -||- 检查 longRunningCpuBoundTask -||- 做更多的 UI 的东西 -||- 检查 longRunningCpuBoundTask |- 从我们在等待处离开的开始 -| longRunningCpuBoundTask 线程 |------------------------------------------------------------ - - - - - - - 完毕! ---------------------------------------|
有人可以纠正我的理解吗?
【问题讨论】:
-
系统中没有部分轮询任务以查看它是否已完成。相反,一旦任务完成,编译器生成的代码会调用捕获的 SynchronizationContext 来安排更多工作。
标签: c# .net multithreading asynchronous async-await