비동기 작업의 실행 순서와 관련하여 질문이 있습니다.async와 콜백
이해하기 쉽기 때문에 예제로 질문 해 보겠습니다.
https://msdn.microsoft.com/en-us/library/mt674882.aspx의 공식 사례입니다.
async Task<int> AccessTheWebAsync()
{
HttpClient client = new HttpClient();
//async operation:
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
// You can do work here that doesn't rely on the string from GetStringAsync.
DoWork1();
// The await operator suspends AccessTheWebAsync.
string urlContents = await getStringTask;
DoWork2();
return urlContents.Length;
}
나는 DoWork2
이 client.GetStringAsync
의 콜백 말할 수 있습니까?
client.GetStringAsync
IF DoWork1
이 완료되면 DoWork2
이 즉시 실행되지 않고 client.GetStringAsync
보다 길게 실행됩니다.
여기 있습니까?
예. 작업을 시작합니다. DoWork1()이 완료되면 작업을 기다리고 있습니다. 이미 완료 되었다면 DoWork2가 즉시 시작됩니다. 그렇지 않으면 작업이 완료되면'DoWork2'가 시작됩니다. –
@AlexanderDerck 그런데 그것은 내가 예상했던 "콜백"과 같은 것이 아닙니다. 내 의견으로는 콜백은 비동기 함수가 완료되면 즉시 실행되어야한다. – derek
DoWork1이 아직 완료되지 않은 경우에도 DoWork2를 실행 (getStringTask 완료시)하고 싶습니까? 어쩌면 [Task.ContinueWith] (https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.continuewith.aspx) 메서드를 살펴보십시오. –