Heim >Backend-Entwicklung >C++ >Wie kann ich in C# einfach nicht blockierende Methodenaufrufe durchführen?

Wie kann ich in C# einfach nicht blockierende Methodenaufrufe durchführen?

DDD
DDDOriginal
2025-01-18 15:46:08669Durchsuche

How Can I Make Non-Blocking Method Calls in C# Simply?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn