C#의 비동기 프로세스 실행
질문:
.NET Framework에서 Process.Start 메서드를 사용하면 외부 응용 프로그램을 실행하거나 배치 파일을 실행할 수 있습니다. 그러나 이 메서드는 동기식입니다. 즉, 프로세스가 완료될 때까지 호출 스레드를 차단합니다. 프로세스 완료를 기다릴 수 있게 해주는 Process.Start의 비동기식 대안이 있습니까?
답변:
Process.Start가 동기식 방법이기는 하지만 다음과 같은 방법이 있습니다. C#에서 비동기 프로세스 실행을 달성합니다. 다음은 두 가지 접근 방식입니다.
Task.Run 사용:
단순히 프로세스를 비동기식으로 시작하려는 경우 Task.Run 메서드를 사용할 수 있습니다. 그러면 새 스레드가 생성되고 해당 스레드에서 프로세스가 실행되어 호출 스레드가 해제됩니다.
private async void RunCommandAsync() { await Task.Run(() => Process.Start("command to run")); }
프로세스 완료를 위한 비동기 대기:
원하는 경우 프로세스가 완료될 때까지 비동기적으로 기다리고 종료 코드를 얻으려면 Process.Exited 이벤트를 다음과 함께 사용할 수 있습니다. TaskCompletionSource
private async Task<int> RunProcessAsync(string fileName) { var tcs = new TaskCompletionSource<int>(); var process = new Process { StartInfo = { FileName = fileName }, EnableRaisingEvents = true }; process.Exited += (sender, args) => { tcs.SetResult(process.ExitCode); process.Dispose(); }; process.Start(); return await tcs.Task; }
이 접근 방식은 새 프로세스를 만들고 Exited 이벤트에 대한 이벤트 처리기를 등록합니다. 프로세스가 종료되면 이벤트 핸들러가 트리거되고 TaskCompletionSource가 프로세스의 종료 코드로 완료됩니다. 대기 작업은 프로세스가 완료될 때까지 호출 코드의 실행을 일시 중지합니다.
위 내용은 C#에서 비동기 프로세스 실행을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!