본문 바로가기
카테고리 없음

[C#] TaskCompletionSource 를 이용한 비동기 작업 대기 예제 입니다.

by Hwoarang757 2025. 1. 7.

TaskCompletionSource의 setResult 값이 설정 되면 대기 상태에서 다음 구문으로 넘어가는 것을 확인할 수 있었습니다.

TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();
   
public async void DoConvertWork() 
{
   Stopwatch stopWatch = new Stopwatch();
   stopWatch.Start();

   var dispTask = Task.Run(async () =>
   {
      while(!tcs.Task.IsCompleted)
      {
		Console.WriteLine($"문서를 변환 한지 {(int)stopWatch.Elapsed.TotalSeconds}초가 경과 하였습니다.");
        await Task.Delay(1000);
      }
   });
   
   //TODO 작업 진행 
   PrintTiffDocument printTiffDocument = new PrintTiffDocument();
   printTiffDocument.convertToTiff();

   await tcs.Task; // 비동기로 작업 완료 대기 시작 
   stopWatch.Stop();
   await dispTask;
}

public void EndConvert()
{
   tcs.SetResult(true); // 작업 완료 
}