Sollte man immer anrufen EndInvoice einen Delegaten innerhalb AsyncCallback?

8

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.

    
Graviton 13.08.2009, 04:08
quelle

2 Antworten

6

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.

    
STW 13.08.2009, 04:25
quelle
3

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?

    
Gishu 13.08.2009 05:06
quelle

Tags und Links