> 백엔드 개발 > C++ > .NET에서 프로세스가 종료될 때까지 비동기적으로 어떻게 기다릴 수 있습니까?

.NET에서 프로세스가 종료될 때까지 비동기적으로 어떻게 기다릴 수 있습니까?

Patricia Arquette
풀어 주다: 2025-01-04 17:28:43
원래의
795명이 탐색했습니다.

How Can I Asynchronously Wait for a Process to Exit in .NET?

Process.WaitForExit()를 사용한 비동기 프로세스 대기

많은 애플리케이션에서는 다른 프로세스가 완료될 때까지 기다려야 합니다. 기본적으로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿