반응형
- Task 생성 및 시작:
- Task 객체가 생성되면, 아직 실행되지 않은 상태. 예를 들어, Task.Run() 또는 Task.Factory.StartNew() 메서드를 호출하면 Task가 실행 준비 상태가 된다.
- Task는 작업 내용을 정의한 delegate(예: Action 또는 Func)를 인자로 받는다.
- 작업 대기열에 추가 (큐잉):
- Task가 시작되면, 작업은 스레드 풀의 작업 대기열에 큐잉된다.. 이 작업 대기열은 스레드 풀에서 관리하며, 실행 대기 중인 작업들을 순차적으로 처리한다.
- 작업이 큐잉된 후, 스레드 풀은 사용 가능한 스레드를 선택하여 해당 작업을 할당한다.
- 스레드 풀에서 스레드 선택:
- 스레드 풀은 관리되는 스레드 풀 안에서 현재 유휴 상태인 스레드를 사용하거나, 필요에 따라 새로운 스레드를 생성하여 작업을 처리한다.
- 스레드 풀의 스레드 수는 최적의 성능을 위해 동적으로 관리된다.
- 작업 실행:
- 할당된 스레드가 작업을 실행하기 시작한다.
- 작업이 비동기 작업을 포함하는 경우, await 키워드나 비동기 메서드를 통해 스레드가 다른 작업을 할 수 있도록 반환될 수 있다.
- 작업 완료:
- 작업이 완료되면, Task는 완료 상태로 전환된다. 이때 Task 객체는 성공적으로 완료되었는지, 예외가 발생했는지, 또는 작업이 취소되었는지에 대한 상태를 가진다.
- 완료된 Task는 관련된 ContinueWith나 await를 사용하여 후속 작업(콜백)으로 이어질 수 있다.
- 결과 반환 (옵션):
- Task<TResult>를 사용하는 경우, 작업이 완료되면 결과 값을 반환할 수 있다.
- 작업이 완료된 후, 스레드 풀은 해당 스레드를 반환하여 다른 작업을 처리할 수 있도록 준비한다.
반응형
'개발관련 > C#' 카테고리의 다른 글
IAsyncStateMachine 과 Task (1) | 2024.09.02 |
---|---|
클래스 멤버 변수를 가진 구조체 (0) | 2024.08.30 |
Dictionary 와 HashTable, SortedDictionary 차이 (0) | 2024.08.30 |
리플렉션(Reflection)과 표현식 트리(Expression Tree) (0) | 2023.10.15 |
System.IO.Pipelines (0) | 2023.02.08 |