다음 코드에서 task1과 task2는 서로 독립적이며 병렬로 실행할 수 있습니다. 다음 두 구현 간의 차이점은 무엇입니까?
var task1 = GetList1Async();
var task2 = GetList2Async();
await Task.WhenAll(task1, task2);
var result1 = await task1;
var result2 = await task2;
과
var task1 = GetList1Async();
var task2 = GetList2Async();
var result1 = await task1;
var result2 = await task2;
왜 다른 하나를 선택해야합니까?
편집 : GetList1Async () 및 GetList2Async () 메서드의 반환 형식을 추가하려면 다른 싶습니다.
첫 번째 예에서는 두 작업이 모두 완료 될 때까지 기다린 다음 두 작업의 결과를 검색합니다.
두 번째 예는 작업이 한 번에 하나씩 완료 될 때까지 기다립니다.
코드에 대해 더 명확한 것을 사용해야합니다. 두 작업의 결과 유형이 같으면 결과를 검색 할 수 있습니다.WhenAll
그와 같이 :
var results = await Task.WhenAll(task1, task2);
WhenAll
불필요하게. - Servy
첫 번째 구문은 더 읽기 쉽습니다. 결과를 얻기 전에 모든 작업이 완료되기를 기다리는 것이 좋습니다. 나는 그것을 두 번째 대신에 사용하는 것이 합리적이라고 생각한다.
또한 3 번째 또는 4 번째 작업을 추가하면 글을 더 적게 작성합니다 ... 나는. :
await Task.WhenAll(task1, task2, task3, task4);
비교 대상 :
var result1 = await task1;
var result2 = await task2;
var result3 = await task3;
var result4 = await task4;
WhenAll
대신. - Servy
var result = await task1;
~의 정확한var result = task1.Result
. 나는 그렇게 생각한다..Result
그래도 더 읽기 쉽습니다. - dcastroAggregateException
)를 사용할 때보 다await
(첫 번째 예외), 그래서async/await
당신은await
위에.Result
예외 동작을 일관되게 유지합니다. - Matt Smith