Heim > Backend-Entwicklung > C++ > Wie kann ich asynchron auf den Prozessausgang in .NET warten, ohne ihn zu blockieren?

Wie kann ich asynchron auf den Prozessausgang in .NET warten, ohne ihn zu blockieren?

Susan Sarandon
Freigeben: 2025-01-05 11:44:39
Original
633 Leute haben es durchsucht

How Can I Asynchronously Wait for Process Exit in .NET Without Blocking?

Asynchroner Process.WaitForExit() mit Ereignissen

Die Anfrage nach einer nicht blockierenden Alternative zu Process.WaitForExit() hat zu der Entdeckung geführt eines wertvollen ereignisgesteuerten Ansatzes. Dieses asynchrone Muster ist besonders relevant für .NET 4.0/C# 5 und höher und bietet eine elegante Lösung.

Beachten Sie den folgenden Codeausschnitt:

/// <summary>
/// Waits asynchronously for the process to exit.
/// </summary>
/// <param name="process">The process to wait for cancellation.</param>
/// <param name="cancellationToken">A cancellation token. If invoked, the task will return
/// immediately as canceled.</param>
/// <returns>A Task representing waiting for the process to end.</returns>
public static Task WaitForExitAsync(this Process process,
    CancellationToken cancellationToken = default(CancellationToken))
{
    if (process.HasExited) return Task.CompletedTask;

    var tcs = new TaskCompletionSource<object>();
    process.EnableRaisingEvents = true;
    process.Exited += (sender, args) => tcs.TrySetResult(null);
    if (cancellationToken != default(CancellationToken))
        cancellationToken.Register(() => tcs.SetCanceled());

    return process.HasExited ? Task.CompletedTask : tcs.Task;
}
Nach dem Login kopieren

Um diese asynchrone Methode zu verwenden, rufen Sie sie einfach auf wie folgt:

public async void Test()
{
   var process = new Process("processName");
   process.Start();
   await process.WaitForExitAsync();

   //Do some fun stuff here...
}
Nach dem Login kopieren

Durch die Übernahme dieses ereignisgesteuerten, asynchronen Ansatzes können Sie den Prozessabschluss ohne großen Aufwand effizient überwachen Beeinträchtigung der Reaktionsfähigkeit der Benutzeroberfläche.

Das obige ist der detaillierte Inhalt vonWie kann ich asynchron auf den Prozessausgang in .NET warten, ohne ihn zu blockieren?. 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