2017-12-07 5 views
-1

즉시 await이 비동기, 비공 인 작업 유형을 반환하는 이유를 설명하고 싶습니다. 즉, await을 연기하면 작업 자체가 반환됩니다. 제목이나 다른 용어의 용어가 정확하지 않으면 알려주십시오. b 유형 Task<string>의 동안즉시 대기 대기 유형 대 연기 대기 시간

private async Task<string> GetUserId(Guid id) 
{ 
    string thisUserId = null; 
    ... do stuff ... 
    return thisUserId; 
} 

public async Task<IActionResult> MyFunc(Guid id) 
{ 
    var a = await GetUserId(id); 
    var b = GetUserId(id); 
    ... do stuff ... 
    await b; 

    return Ok(true); 
} 

왜 형 stringa입니까?

+2

'Task '유형의 표현식을 기다리는 결과는 항상 'T'입니다. 하나의 경우에는 메서드 호출을 하나의 명령문에서 기다리고 다른 명령문에서는 두 개의 별도 명령문에서 수행했습니다. –

답변

2

두 가지 경우 모두 사용자의 메서드는 항상 Task<string> 유형의 개체를 반환합니다. 그러나 await을 수행하면 그 결과는 문자열 인 Task의 결과입니다.

따라서 원래 메서드를 호출 할 때 이렇게하면 Task이 즉시 처리됩니다. 그러나 두 번째 전화를 걸면 "할 일"이 될 때까지 Task을 처리하지 않습니다. 이 경우 변수는 여전히 문자열을 반환하는 Task입니다. 마지막으로 await을 호출하면 해당 작업의 결과가 나타납니다.

+2

완전히 이해합니다. 고맙습니다. – 8protons