在调用者被处置之前,await调用未完成会发生什么?

时间:2014-01-24 10:25:41

标签: c# async-await

想象一下你有一种形式的控件或另一种形式的场景。它可以是WP8上的页面,也可以是WinForms中的表单,我觉得它不重要(或者它是什么?)。在某些时候,你在一个方法上调用await,但不久之后控件就被用户关闭了。

您正在等待的任务会怎样?它会继续执行吗?如果它返回,它返回到哪里?如果取消,是否会抛出异常?

最后,有没有办法指定您希望执行继续/完成?

1 个答案:

答案 0 :(得分:4)

Task继续执行。它不能是任何其他方式,因为运行代码只能合作中止(不考虑这里的邪恶Thread.Abort。)

Task对其环境一无所知。获取完成通知并尝试在捕获的SynchronizationContext上恢复异步方法的等待者。

完全取决于SynchronizationContext会发生什么。有许多不同的可能背景,完整的答案取决于您的GUI框架。