Könnte mir bitte jemand einen kleinen Codeausschnitt zeigen, der zeigt, wie eine Methode in c # asynchron aufgerufen wird?
quelle
Könnte mir bitte jemand einen kleinen Codeausschnitt zeigen, der zeigt, wie eine Methode in c # asynchron aufgerufen wird?
Wenn Sie action.BeginInvoke () verwenden, müssen Sie EndInvoke irgendwo aufrufen - andernfalls muss das Framework das Ergebnis des asynchronen Aufrufs auf dem Heap speichern, was zu einem Speicherverlust führt.
Wenn Sie nicht mit den Schlüsselwörtern async / await zu C # 5 springen möchten, können Sie einfach die Task Parallels-Bibliothek in .Net 4 verwenden. Sie ist viel, viel schöner als BeginInvoke / EndInvoke und bietet eine saubere Möglichkeit zum Feuern. und-vergessen für asynchrone Jobs:
using System.Threading.Tasks;
...
void Foo(){}
...
new Task(Foo).Start();
Wenn Sie Methoden zum Aufrufen haben, die Parameter annehmen, können Sie ein Lambda verwenden, um den Aufruf zu vereinfachen, ohne Delegaten erstellen zu müssen:
void Foo2(int x, string y)
{
return;
}
...
new Task(() => { Foo2(42, "life, the universe, and everything");}).Start();
Ich bin mir ziemlich sicher (aber zugegebenermaßen nicht positiv), dass die asynchrone / wartende C # 5-Syntax nur syntaktischer Zucker in der Task-Bibliothek ist.
Ab .Net 4.5 können Sie mit Task.Run einfach eine Aktion starten:
Task.Run vs Task.Factory.StartNew
quelle
Hier ist eine Möglichkeit, dies zu tun:
Natürlich müssen Sie
Action
durch einen anderen Delegatentyp ersetzen, wenn die Methode eine andere Signatur hatquelle
Lesen Sie den MSDN-Artikel Asynchrone Programmierung mit Async und Await, wenn Sie es sich leisten können, mit neuen Dingen zu spielen. Es wurde zu .NET 4.5 hinzugefügt.
Beispielcode-Snippet aus dem Link (der selbst aus diesem MSDN-Beispielcode-Projekt stammt ):
Zitat:
Weitere Details finden Sie im Link .
quelle
quelle