많은 애플리케이션에서는 다른 프로세스가 완료될 때까지 기다려야 합니다. 기본적으로 Process.WaitForExit()를 사용하면 호출 스레드가 차단되어 잠재적으로 GUI가 정지됩니다. 이 문서에서는 .NET에서 비동기 프로세스 대기를 달성하기 위한 이벤트 기반 접근 방식을 살펴봅니다.
.NET 4.0 및 C# 5에 도입된 향상된 기능을 통해 다음을 우아하게 표현할 수 있습니다. 비동기 패턴을 사용한 비동기 대기. 다음 코드 조각은 방법을 보여줍니다.
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; }
비동기 대기 기능을 활용하려면 Process 인스턴스에서 WaitForExitAsync() 메서드를 호출하기만 하면 됩니다.
public async void Test() { var process = new Process("processName"); process.Start(); await process.WaitForExitAsync(); //Do some fun stuff here... }
비동기식 접근 방식을 사용하면 GUI가 기다리는 동안 응답성을 유지할 수 있습니다. 완료하는 과정입니다. 또한 수동 스레드 생성 및 이벤트 위임이 필요하지 않습니다.
위 내용은 .NET에서 프로세스가 종료될 때까지 비동기적으로 어떻게 기다릴 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!