当运行线程遇到一个
当达到上述
调用线程如何知道在某个时候“回来”呢?内部发生了什么以实现这一点?
await
时,内部使用什么机制来“标记”该特定方法最终需要在等待的任务完成后恢复?
考虑以下方法:public async void DoSomething()
{
await Task.Run(() => SomeLongRunningWork());
// Code to resume when the task is done...
Console.WriteLine("Resuming...");
}
当达到上述
await
时,线程池中的一个线程将用于执行长时间运行的任务。此外,调用线程立即退出 DoSomething() 方法,并在任务完成后“返回”。调用线程如何知道在某个时候“回来”呢?内部发生了什么以实现这一点?
await
关键字后面的代码封装成一个“续体”,并将其作为任务完成后应运行的代码传递给任务。这比我描述的更为复杂(例如,需要等待器确定续体应在哪个线程上运行,如何处理异常等)。当async
/await
即将发布时,有很多优秀的博客和MSDN文章详细讨论了这一点。 - Flydog57