Heim >Backend-Entwicklung >C++ >Wie erreicht man eine asynchrone Prozessausführung in .NET?

Wie erreicht man eine asynchrone Prozessausführung in .NET?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-05 02:53:39577Durchsuche

How to Achieve Asynchronous Process Execution in .NET?

Asynchrone Prozessausführung in .NET

In .NET wird die Process.Start()-Methode zum Ausführen externer Anwendungen oder Batchdateien verwendet . Diese Methode ist jedoch synchron, d. h. sie blockiert den aufrufenden Thread, bis der Prozess abgeschlossen ist.

Für Szenarien, in denen eine asynchrone Ausführung gewünscht ist, fragen Sie sich möglicherweise, ob es ein Äquivalent zu Process.Start() gibt, mit dem Sie warten können es ist abgeschlossen.

Antwort

Obwohl es kein direktes asynchrones Äquivalent von Process.Start() gibt, Es gibt zwei Ansätze, um diesem Bedarf gerecht zu werden:

1. Verwenden von Task.Run()

Wenn Sie den Prozess einfach asynchron ausführen möchten, ohne auf seinen Abschluss zu warten, können Sie die Methode Task.Run() verwenden:

void RunCommandAsync()
{
    Task.Run(() => Process.Start("command to run"));
}

2. Asynchrones Warten auf den Abschluss des Prozesses

Wenn Sie asynchron auf den Abschluss des Prozesses warten müssen, bevor Sie fortfahren, können Sie das Exited-Ereignis und eine TaskCompletionSource nutzen:

static Task<int> RunProcessAsync(string fileName)
{
    var tcs = new TaskCompletionSource<int>();

    var process = new Process
    {
        StartInfo = { FileName = fileName },
        EnableRaisingEvents = true
    };

    process.Exited += (sender, args) =>
    {
        tcs.SetResult(process.ExitCode);
        process.Dispose();
    };

    process.Start();

    return tcs.Task;
}

Das obige ist der detaillierte Inhalt vonWie erreicht man eine asynchrone Prozessausführung in .NET?. 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