1
我試圖找到我的應用程序中的內存泄漏,我想知道如果我必須(或應該)在超時情況下調用EndInvoke。我打電話一個外部系統,我必須有辦法停止等待,如果執行太長:避免異步超時內存泄漏
Dim ar As IAsyncResult
Try
ar = deleg.BeginInvoke(Nothing, New Object)
If Not ar.AsyncWaitHandle.WaitOne(getTimeout, False) Then
'Should I call EndInvoke here
Throw New Exceptions.TimeoutException
Else
response = deleg.EndInvoke(ar)
End If
Finally
ar = Nothing
End Try
感謝
感謝您的回答。不幸的是,我使用的服務器是.Net 3.5,我無法升級到.NET 4.0或在其上安裝任何軟件包(例如Rx擴展)。你知道只有.NET 3.5才能做到這一點嗎?另外,你說我在ThreadPool中只能有64個句柄。你是否同時意味着64個手柄?當線程完成(或超時)時,是否釋放了句柄? –
Rx不需要安裝 - 它可以僅在bin運行時運行。除了Rx AFAIK之外,還沒有3.5的「Task」實現。 64-句柄限制適用於'RegisterWaitForSingleObject',所以它限制了已經超時但尚未完成的異步委託的數量。 –
我們最終將項目的這一部分轉換爲.Net 4,以便我可以使用這些任務。感謝你的回答。 –