Ich lese die AsyncCallback verwenden , dort ist dieses Code-Snippet:
%Vor% Beachten Sie, dass in DoSomething2
, das ein AsyncCallback
ist, der Delegat explizit durch den Befehl EndInvoke
getötet wird.
Ist das wirklich notwendig? Weil AsyncCallback
erst dann aufgerufen wird, wenn die Delegate-Methode beendet ist.
Das Aufrufen von EndInvoke () ist sehr wichtig. Wenn die Hintergrundmethode eine Ausnahme generiert, löst das Aufrufen von EndInvoke () diese Ausnahme aus, sodass Ihr Haupt-Thread damit umgehen kann. Wenn die Hintergrundmethode einen Rückgabewert hat, muss der Hauptthread EndInvoke () aufrufen, um diesen Wert abzurufen.
Wenn Ihr Hintergrund-Thread in eine dieser Situationen fällt (eine Ausnahme erzeugt oder einen Rückgabewert hat) und Sie nicht EndInvoke () aufrufen, wird der Hintergrund-Thread nicht freigegeben-- was im Wesentlichen zu einem Ressourcenverlust führt.
Ja.
Es gibt eine Reihe von Diskussionen, die alle zu der gleichen Schlussfolgerung führen - es ist ein Ressourcenverlust, wenn Sie das nicht tun.
Suche nach MSDN Vorsicht Hier und Hier
IanG - EndInvoke nicht optional
CBrummes Blogeintrag über asynchrone Operationen
Eine verwandte Frage zu SO - Muss ich EndInvoke nach einer Zeitüberschreitung anrufen?
Tags und Links .net multithreading