Heim >Backend-Entwicklung >C++ >Wie führt man nicht blockierende Methodenaufrufe in C# mit „ThreadPool.QueueUserWorkItem' und „Task.Run' durch?

Wie führt man nicht blockierende Methodenaufrufe in C# mit „ThreadPool.QueueUserWorkItem' und „Task.Run' durch?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-18 16:02:09974Durchsuche

How to Make Non-Blocking Method Calls in C# Using `ThreadPool.QueueUserWorkItem` and `Task.Run`?

Nicht blockierender Methodenaufruf in C#: Verwendung von ThreadPool.QueueUserWorkItem und Task.Run

In C# können Methoden nicht blockierend ausgeführt werden, sodass Threads weiterhin ausgeführt werden können, ohne auf den Abschluss der Methode warten zu müssen.

Der direkteste Weg ist die Verwendung der ThreadPool.QueueUserWorkItem-Methode. Es akzeptiert einen WaitCallback-Delegaten als Parameter, der die Methode angibt, die asynchron ausgeführt werden soll.

Beispiel:

<code class="language-csharp">using System.Threading;

class Foo
{
    static void Main()
    {
        // FireAway将在后台执行
        ThreadPool.QueueUserWorkItem(o => FireAway());

        Console.WriteLine("立即执行");
    }

    static void FireAway()
    {
        Thread.Sleep(5000);
        Console.WriteLine("5秒后执行");
    }
}</code>

In diesem Beispiel wird die FireAway-Methode in den Thread-Pool eingereiht und der Hauptthread setzt die Ausführung unmittelbar nach dem Initiieren des asynchronen Aufrufs fort.

Eine andere Methode: Task.Run

Eine modernere und übersichtlichere Möglichkeit, Aufgaben asynchron auszuführen, ist die Verwendung der Task.Run-Methode, die ein Task-Objekt zurückgibt, das den asynchronen Vorgang darstellt.

Beispiel:

<code class="language-csharp">using System.Threading.Tasks;

class Foo
{
    static void Main()
    {
        // FireAway将在后台执行
        Task.Run(() => FireAway());

        Console.WriteLine("立即执行");
    }

    static void FireAway()
    {
        Thread.Sleep(5000);
        Console.WriteLine("5秒后执行");
    }
}</code>

ThreadPool.QueueUserWorkItem und Task.Run bieten beide effiziente Möglichkeiten, Methoden in C# nicht blockierend auszuführen. Beim Einsatz dieser Technologien in verschiedenen Szenarien ist es jedoch wichtig, ihre möglichen Auswirkungen und Einschränkungen zu berücksichtigen.

Das obige ist der detaillierte Inhalt vonWie führt man nicht blockierende Methodenaufrufe in C# mit „ThreadPool.QueueUserWorkItem' und „Task.Run' durch?. 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