개발관련/C#

Task 사용 시의 흐름

Diademata 2024. 9. 2. 23:04
반응형

 

  • Task 생성 및 시작:
    • Task 객체가 생성되면, 아직 실행되지 않은 상태. 예를 들어, Task.Run() 또는 Task.Factory.StartNew() 메서드를 호출하면 Task가 실행 준비 상태가 된다.
    • Task는 작업 내용을 정의한 delegate(예: Action 또는 Func)를 인자로 받는다.
  • 작업 대기열에 추가 (큐잉):
    • Task가 시작되면, 작업은 스레드 풀의 작업 대기열에 큐잉된다.. 이 작업 대기열은 스레드 풀에서 관리하며, 실행 대기 중인 작업들을 순차적으로 처리한다.
    • 작업이 큐잉된 후, 스레드 풀은 사용 가능한 스레드를 선택하여 해당 작업을 할당한다.
  • 스레드 풀에서 스레드 선택:
    • 스레드 풀은 관리되는 스레드 풀 안에서 현재 유휴 상태인 스레드를 사용하거나, 필요에 따라 새로운 스레드를 생성하여 작업을 처리한다.
    • 스레드 풀의 스레드 수는 최적의 성능을 위해 동적으로 관리된다.
  • 작업 실행:
    • 할당된 스레드가 작업을 실행하기 시작한다.
    • 작업이 비동기 작업을 포함하는 경우, await 키워드나 비동기 메서드를 통해 스레드가 다른 작업을 할 수 있도록 반환될 수 있다.
  • 작업 완료:
    • 작업이 완료되면, Task는 완료 상태로 전환된다. 이때 Task 객체는 성공적으로 완료되었는지, 예외가 발생했는지, 또는 작업이 취소되었는지에 대한 상태를 가진다.
    • 완료된 Task는 관련된 ContinueWith나 await를 사용하여 후속 작업(콜백)으로 이어질 수 있다.
  • 결과 반환 (옵션):
    • Task<TResult>를 사용하는 경우, 작업이 완료되면 결과 값을 반환할 수 있다.
    • 작업이 완료된 후, 스레드 풀은 해당 스레드를 반환하여 다른 작업을 처리할 수 있도록 준비한다.

 

 

 

 

 

반응형