2014-01-24 41 views
3

想象一下,您擁有一種形式的控件或其他形式的場景。它可以是WP8上的一個頁面,也可以是WinForms中的一個窗體,我認爲它不重要(或者是否?)。在某個時候,你呼叫等待一個方法,但不久之後,控制就被用戶關閉了。在處理呼叫者之前沒有完成的等待呼叫會發生什麼?

您正在等待的任務會發生什麼?它是否繼續執行?如果它返回,它返回到哪裏?如果取消,是否拋出異常?

最後,有沒有辦法指定你想要執行繼續/完成?

+1

「調用者」是一種方法,而不是一個對象,所以我認爲把它當作調用者來處理並不合理。 (從技術上講,該方法轉變爲一個類,但即使如此,這不是什麼被處理。) – hvd

回答

4

Task繼續執行。它不能以任何其他方式,因爲運行代碼只能協作中止(不考慮這裏的邪惡Thread.Abort)。

Task對其環境一無所知。是被通知完成的awaiter,並且嘗試恢復被捕獲的SynchronizationContext的異步方法。

這完全取決於SynchronizationContext會發生什麼情況。有許多不同的可能的上下文,完整的答案取決於你的GUI框架。

+0

這也是我的推理,我期待着執行繼續。但是,當我嘗試在WP8上測試它時,它永遠不會從嵌套的await調用返回。 –

+2

嵌套等待也發佈到捕獲的上下文中,除非您使用'ConfigureAwait(false)'。似乎WP8不再執行回調,如果同步上下文處置。然後,一切都會停止,你的等待將永遠掛起。 – usr

相關問題