Dot-Net
每個 BeginInvoke 之後必須跟一個 EndInvoke 嗎?
MS 文件中的此頁面,涵蓋 Windows 窗體應用程序中的非同步,指出:
如果需要,您可以呼叫 EndInvoke 從委託中檢索返回值,但這不是必需的。(重點補充)
該頁面涵蓋了非同步委託的一般情況,陳述了一些不同的內容:
無論您使用哪種技術,始終呼叫 EndInvoke 來完成您的非同步呼叫。
這兩者似乎是直接衝突的。
哪個是真的?有人可以解釋嗎?
另請參閱Phil Haack 的文章。
除非介面的文件明確說明,否則您必須為每個呼叫 BeginInvoke 的地方呼叫 EndInvoke。主要原因是 EndInvoke 是所有者可以安全地釋放某些可能分配給 BeginInvoke 呼叫(例如 WaitHandle)的資源的唯一時間。
但這條規則也有例外。Control.BeginInvoke 等 API 不需要 EndInvoke,但它在文件中是明確的。