상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - C#에서 TaskCompletionSource의 역할은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
`TaskCompletionSource<T>`는 C 의 `System.Threading.Tasks` <a href='https://sangseek.com/sangseeks/네임/ko'>네임</a>스페이스에 포함된 클래스이며, 비동기 프로그래밍에서 중요한 역할을 합니다. 이 클래스는 비동기 작업의 결과를 수동으로 설정할 수 있도록 해주며, 주로 비동기 메서드의 결과를 제어하거나, 비동기 작업의 완료를 수동으로 신호를 보내는 데 사용됩니다. 기본 개념 `TaskCompletionSource<T>`는 제네릭 타입으로, `T`는 작업의 결과 타입을 나타냅니다. 이 클래스는 `Task<T>` 객체를 생성하고, 이 객체의 상태를 제어할 수 있는 메서드를 제공합니다. `TaskCompletionSource<T>`를 사용하면, 비동기 작업의 결과를 나중에 설정할 수 있으며, 이를 통해 비동기 프로그래밍의 유연성을 높일 수 있습니다. 사용 사례 1. 비동기 이벤트 처리 : 이벤트 기반 프로그래밍에서 비동기 이벤트가 발생할 때, `TaskCompletionSource<T>`를 사용하여 이벤트가 발생한 후 결과를 반환할 수 있습니다. 예를 들어, 특정 이벤트가 발생할 때까지 기다리는 비동기 메서드를 작성할 수 있습니다. 2. 비동기 API 래핑 : 기존의 비동기 API를 래핑할 때 유용합니다. 예를 들어, 콜백 기반의 API를 비동기 메서드로 변환할 때, `TaskCompletionSource<T>`를 사용하여 콜백이 호출될 때 결과를 설정할 수 있습니다. 3. 비동기 작업의 조합 : 여러 비동기 작업을 조합할 때, 특정 조건이 충족될 때까지 기다리는 경우에 유용합니다. 예를 들어, 여러 비동기 작업이 완료될 때까지 기다린 후 결과를 반환하는 경우에 사용할 수 있습니다. 사용 방법 `TaskCompletionSource<T>`의 사용 방법은 다음과 같습니다: 1. 인스턴스 생성 : `TaskCompletionSource<T>`의 인스턴스를 생성합니다. ```csharp var tcs = new TaskCompletionSource<string>(); ``` 2. 비동기 작업 시작 : 비동기 작업을 시작하고, 작업이 완료되면 `SetResult`, `SetException`, 또는 `SetCanceled` 메서드를 호출하여 작업의 결과를 설정합니다. ```csharp // 비동기 작업을 시작하는 예시 <a href='https://sangseek.com/sangseeks/Task.Run/ko'>Task.Run</a>(() => { // 작업 수행 Thread.Sleep(1000); // 예를 들어, <a href='https://sangseek.com/sangseeks/1초/ko'>1초</a> 대기 tcs.SetResult("작업 완료"); }); ``` 3. 결과 대기 : `TaskCompletionSource<T>`의 `Task` 속성을 통해 결과를 대기할 수 있습니다. ```csharp string result = await tcs.Task; Console.WriteLine(result); // "작업 완료" 출력 ``` 예외 처리 `TaskCompletionSource<T>`는 예외 처리도 지원합니다. 비동기 작업 중에 예외가 발생하면 `SetException` 메서드를 호출하여 예외를 설정할 수 있습니다. 이를 통해 호출자는 예외를 처리할 수 있습니다. ```csharp Task.Run(() => { try { // 작업 수행 throw new InvalidOperationException("오류 발생"); } catch (Exception ex) { tcs.SetException(ex); } }); // 예외 처리 try { string result = await tcs.Task; } catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); // "오류 발생" 출력 } ``` 결론 `TaskCompletionSource<T>`는 비동기 프로그래밍에서 매우 유용한 도구로, 비동기 작업의 결과를 수동으로 설정할 수 있게 해줍니다. 이를 통해 비동기 이벤트 처리, API 래핑, 비동기 작업의 조합 등 다양한 시나리오에서 유연하게 사용할 수 있습니다. C 의 비동기 프로그래밍 모델을 이해하고 활용하는 데 있어 중요한 역할을 하는 클래스입니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기