2012-08-13 3 views
0

async로 선언 된 비동기 메서드가 반환 유형이 Task 또는 Task 인 경우 <TResult> 기다릴 수 있습니다. 메서드 내에서 C# 코드에서는 아무 작업도 반환되지 않지만 작업 <의 경우 TResult >의 값은 TResult입니다. 예를 들면 다음과 같습니다.작업을 반환하는 비동기 메서드가 반환하는 작업은 무엇을 나타 냅니까?

private static async Task<int> AsyncDemo() 
{ 
    await Task.Delay(1000); 
    return 1; 
} 

결과 IL 코드는 컴파일 된 상태 시스템을 시작한 AsyncTaskMethodBuilder의 작업을 반환합니다. 제 질문은이 임무가 실제로 무엇을 나타내는가하는 것입니다. 나는 그것이 쓰레드가 아니라, 상태 머신의 실행을 나타내는 작업이라고 가정한다. 또한 상태 머신이 완료되거나 예외가 발생할 때 오류 상태로 설정되면 작업이 완료된다고 가정합니다. 나는 명확한 점을 고맙게 생각한다.

답변

1

작업은 개념적으로 메서드를 나타냅니다.

메서드가 반환되면 작업이 완료되고 (성공적으로) 메서드에 의해 반환 된 값으로 설정됩니다 (해당되는 경우). 메서드가 예외를 throw하면 작업에 오류가 발생합니다 (오류로 완료). OperationCanceledException에 대한 특별한 경우가 있습니다.이 경우 작업이 취소됩니다 (취소와 함께 완료).

기술적으로 작업은 상태 머신을 나타내며 이는 다시 작성됩니다. 그러나 상태 시스템이 숨겨져 있기 때문에 작업은 개념적으로 메서드 자체를 나타냅니다.

+0

스티븐 감사합니다. –

관련 문제