Heim >Backend-Entwicklung >C++ >Wie kann ich asynchron auf den Prozessausgang in .NET warten, ohne ihn zu blockieren?
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!