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
Susan SarandonOriginal
2025-01-05 11:44:39602Durchsuche

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;
}

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...
}

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!

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