ToArray()가 실행될 때 작업이 시작되는 이유를 이해하려고 시도합니다. 그리고 DoSomething 메서드에 넣은 중단 점이 절대로 손상되지 않습니다.LINQ/async/await
private async void MyMethod()
{
await NewMethod();
string[] array = { "http://google.com", "http://microsoft.com"};
IEnumerable<Task<string>> query = from url in array select DoSomething(url);
Task<string>[] tasks = query.ToArray();
string[] contents = await Task.WhenAll(tasks);
}
private async Task<string> DoSomething(string url)
{
HttpClient hc = new HttpClient();
string content = await hc.GetStringAsync(url);
return content;
}
실제로 ToArray()가 작업을 시작하면 DoSomething 메서드의 중단 점에서 실행이 중지되어야합니다.
당신에게 콘솔 응용 프로그램에 Async Main
을 사용하여 코드의 다음 버전을
이는 linq의 동작입니다. 실제 쿼리는 결과 세트가있는 것을 원하지 않는 한 실행되지 않습니다. linq에서 지연 및 즉각적인 쿼리 실행을 살펴보십시오. –
'DoSomething' 코드를 입력하고 거기에 중단 점을 어디에 두 었는지 보여줍니다. 당신이 여전히 실행해야 할 몇 가지 작업이 반환되고 있습니다. –
그리고'Task's ('await','WaitAll()','WhenAny()'등을 어떻게 실행하는지 보여주세요. – dymanoid