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

Wie erreicht man eine asynchrone Prozessausführung in C#?

Patricia Arquette
Freigeben: 2025-01-05 13:15:42
Original
913 Leute haben es durchsucht

How to Achieve Asynchronous Process Execution in C#?

Asynchrone Prozessausführung in C#

Frage:

Im .NET Framework ist die Mit der Process.Start-Methode können wir externe Anwendungen ausführen oder Batchdateien ausführen. Diese Methode ist jedoch synchron, d. h. sie blockiert den aufrufenden Thread, bis der Prozess abgeschlossen ist. Gibt es eine asynchrone Alternative zu Process.Start, die es uns ermöglicht, auf den Abschluss des Prozesses zu warten?

Antwort:

Obwohl Process.Start eine synchrone Methode ist, gibt es Möglichkeiten um eine asynchrone Prozessausführung in C# zu erreichen. Hier sind zwei Ansätze:

Task.Run verwenden:

Wenn Sie einen Prozess einfach asynchron starten möchten, können Sie die Task.Run-Methode verwenden. Dadurch wird ein neuer Thread erstellt und der Prozess in diesem Thread ausgeführt, wodurch der aufrufende Thread frei wird.

private async void RunCommandAsync()
{
    await Task.Run(() => Process.Start("command to run"));
}
Nach dem Login kopieren

Asynchrones Warten auf Prozessabschluss:

Wenn Sie möchten Um asynchron auf den Abschluss des Prozesses zu warten und seinen Exit-Code abzurufen, können Sie das Process.Exited-Ereignis zusammen mit verwenden TaskCompletionSource:

private async 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 await tcs.Task;
}
Nach dem Login kopieren

Dieser Ansatz erstellt einen neuen Prozess und registriert einen Ereignishandler für das Exited-Ereignis. Wenn der Prozess beendet wird, wird der Ereignishandler ausgelöst und die TaskCompletionSource wird mit dem Exit-Code des Prozesses vervollständigt. Der Wartevorgang unterbricht die Ausführung des aufrufenden Codes, bis der Vorgang abgeschlossen ist.

Das obige ist der detaillierte Inhalt vonWie erreicht man eine asynchrone Prozessausführung in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage