Silverlight에서 여러 개의 비동기 작업을 실행해야합니다. 제 3 자 패키지 상태의async/await를 사용하여 병렬 작업 실행
문서는 난 단지 Task.WaitAll()
이
await Task.WhenAll()
불행하게도 실버를 사용할 수 있으며 awaitable 없습니다. 만약 내가 그것을 사용하려고하면 나는 교착 상태가된다. (모든 것이 얼어 버리기 때문에)
비동기 메소드에서 사용할 적절한 패턴은 무엇인가?
Silverlight에서 여러 개의 비동기 작업을 실행해야합니다. 제 3 자 패키지 상태의async/await를 사용하여 병렬 작업 실행
문서는 난 단지 Task.WaitAll()
이
await Task.WhenAll()
불행하게도 실버를 사용할 수 있으며 awaitable 없습니다. 만약 내가 그것을 사용하려고하면 나는 교착 상태가된다. (모든 것이 얼어 버리기 때문에)
비동기 메소드에서 사용할 적절한 패턴은 무엇인가?
난 당신이 Microsoft.Bcl.Async 패키지를 사용하는 가정합니다.
이 (추가 기능) 패키지는 (내장형) Task
유형을 수정할 수 없으므로 TaskEx
유형의 유용한 메소드를 찾을 수 있습니다. WhenAll
:
await TaskEx.WhenAll(...);
질문을 올바르게 이해하면 TaskFactory.ContinueWhenAll을 사용하여 유사한 문제가 발생할 수 있다고 생각합니다. Example는 :
실버 라이트에 대한var task1 = Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
return "dummy value 1";
});
var task2 = Task.Factory.StartNew(() =>
{
Thread.Sleep(2000);
return "dummy value 2";
});
var task3 = Task.Factory.StartNew(() =>
{
Thread.Sleep(3000);
return "dummy value 3";
});
Task.Factory.ContinueWhenAll(new[] { task1, task2, task3 }, tasks =>
{
foreach (Task<string> task in tasks)
{
Console.WriteLine(task.Result);
}
});
그 반대의 경우가 있습니다. Silverlight API에서 제외되어야하는 'WaitAll'이며 WhenAll이 포함되어야합니다. 적절한 버전의 .NET이 설치되어 있습니까? – Servy
FWIW, 내 주식 SL5에서 나는 단지'Task.WaitAll'을 본다; 어떤 타사 라이브러리를 설치하지 않는 한'Task.WhenAll'이 없습니다. –