2011-04-02 23 views
1

我是否需要對傳遞給ThreadPool.QueueUserWorkItem的委託調用EndInvoke?ThreadPool.QueueUserWorkItem和EndInvoke

我正在使用this建議來調用ThreadPoolQueueWorkItem。

ThreadPool.QueueUserWorkItem(
    delegate { someDelegate(arg1, arg2); } 
); 

如果我需要調用endinvoke,該如何調用它?謝謝。

回答

4

不,你不需要調用它。事實上,你不應該:-)

你應該只調用EndInvoke來結束以前通過調用BeginInvoke啓動的異步調用。

在您提供的代碼中,您正在從ThreadPool線程同步運行委託。

當你有一個「消防和忘記」的要求時,這種方法就好了。但是,如果您需要從調用中檢索輸出,則最好使用BeginInvoke和EndInvoke。

+0

太好了。這就是我需要知道的。我正在做火和忘記的方法。 – kevindaub 2011-04-02 15:08:43

0

你不需要,不,但根據MSDN你應該避免潛在的內存泄漏。這裏有一個great blog post by Phil Haack討論這個問題,以及他的助手類的火災和忘記用例。

+0

你得到了問題的第一部分。我需要調用它。但是如何? – kevindaub 2011-04-02 14:25:43

+0

對不起,由於您沒有調用BeginInvoke,因此在您的示例中您不需要這樣做。 – BrandonZeider 2011-04-02 14:49:58

相關問題