2010-03-10 77 views

回答

2

每次調用BeginInvoke都會觸發對.net線程池的新請求。

多次撥打BeginInvoke是完全可以接受的。每個IAsyncResult對象對於特定呼叫BeginInvoke都是唯一的。

只要注意確保您撥打電話號碼EndInvoke即可撥打電話BeginInvoke,以確保清理資源。

(請注意,每次調用並不一定等同於一個線程。BeginInvoke傳遞請求的線程池,這可能排隊的請求,如果所有池中的線程都已經在使用)

1

例如,您可能有多個線程調用相同的委託實例,因爲您希望它們都執行相同的任務。

3

爲什麼它不起作用?每次調用它時,它都會開始在線程池線程上執行該委託的操作。是的,每個IAsyncResult將獨立於其他,表示該異步操作。

是的,你只需要委託的一個實例。請注意,代表是不可變的 - 呼叫BeginInvoke不會改變其狀態。您可以放心地拿一份委託參考的副本,因爲知道調用Delegate.Combine等總是會創建一個委託實例,而不是修改現有委託。

1

是的。

每次撥打BeginInvoke時都會返回一個不同的IAsyncResult,可以按任意順序傳遞給EndInvoke

您可以使用相同的委託進行多個異步調用。

相關問題