Vereinfachung nicht blockierender Methodenaufrufe in C#
C# bietet mehrere Möglichkeiten zum Erstellen nicht blockierender Methoden – Methoden, die asynchron ausgeführt werden, ohne den Hauptthread anzuhalten. Während das [OperationContract(IsOneWay = true)]
-Attribut von WCF diese Funktionalität bereitstellt, kann es für einfachere Szenarien übertrieben sein.
Der einfachste Ansatz verwendet ThreadPool.QueueUserWorkItem
. Diese Methode fügt effizient eine Aufgabe zum Thread-Pool hinzu und ermöglicht so eine asynchrone Ausführung.
Hier ist ein anschauliches Beispiel:
<code class="language-csharp">class Foo { static void Main() { ThreadPool.QueueUserWorkItem(_ => FireAway()); //Asynchronous execution Console.WriteLine("Immediate execution"); } static void FireAway() { System.Threading.Thread.Sleep(5000); Console.WriteLine("Execution after 5 seconds"); } }</code>
Alternativ bieten C# 5.0 und spätere Versionen Task.Run
, was eine modernere und prägnantere Möglichkeit bietet, eine asynchrone Ausführung in einem Thread-Pool-Thread zu erreichen:
<code class="language-csharp">Task.Run(() => FireAway());</code>
Sowohl ThreadPool.QueueUserWorkItem
als auch Task.Run
verhindern, dass der Hauptthread während der Ausführung der asynchronen Methode blockiert.
Es ist jedoch wichtig zu prüfen, ob der Abschluss der Methode unbedingt erforderlich ist, bevor die Main
-Methode beendet wird. In Umgebungen wie ASP.NET sind möglicherweise zusätzliche Mechanismen erforderlich, um eine vorzeitige Beendigung des asynchronen Vorgangs zu verhindern.
Das obige ist der detaillierte Inhalt vonWie kann ich in C# einfach nicht blockierende Methodenaufrufe durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!