async로 선언 된 비동기 메소드가 Task 또는 Task < TResult > 그것은 기다릴 수 있습니다. 메서드 내에서 C #코드에서는 작업이 반환되지 않지만 Task < TResult > TResult의 값 예를 들면 :
private static async Task<int> AsyncDemo()
{
await Task.Delay(1000);
return 1;
}
결과 IL 코드는 컴파일 된 상태 시스템을 시작한 AsyncTaskMethodBuilder 태스크를 리턴합니다. 제 질문은이 임무가 실제로 무엇을 나타내는가하는 것입니다. 나는 그것이 쓰레드가 아니라, 상태 머신의 실행을 나타내는 작업이라고 가정한다. 또한 상태 머신이 완료되거나 예외가 발생할 때 오류 상태로 설정되면 작업이 완료된다고 가정합니다. 나는 명확한 점을 고맙게 생각한다.
작업은 개념적으로 메서드를 나타냅니다.
메서드가 반환되면 작업이 완료되고 (성공적으로) 결과에 메서드에서 반환 된 값이 설정됩니다 (해당되는 경우). 메서드가 예외를 throw하면 작업에 오류가 발생합니다 (오류로 완료). 특별한 경우가 있습니다.OperationCanceledException
:이 경우 작업이 취소됩니다 (취소와 함께 완료).
기술적으로이 태스크는 상태 머신을 나타내며 이는 메소드의 재 작성입니다. 그러나 상태 시스템이 숨겨져 있기 때문에 작업은 개념적으로 메서드 자체를 나타냅니다.