혼란이있는 것 같습니다. (설명서가 오도 할 수도 있습니다.)
Task.Run
방법을 Inoking 것 결코 던져 TaskCanceledException
(적어도 현재의 구현). 및 ObjectDisposedException
과 달리 "The action 매개 변수가 null"이고 "cancellationToken과 연결된 CancellationTokenSource가 삭제되었습니다"때 동 기적으로 throw됩니다. 각기.
Task.Run
그러나 던질 것 등 task.Wait()
, task.Result
를, (더 here에서 취소에서) CancellationToken
매개 변수를 사용하고 await task
으로 기다리고 취소 될 수 Task
을 반환하는 TaskCanceledException
(아마도
AggregateException
에 싸여)
Task<int> task = null;
try
{
task = Task.Run(() => 5, new CancellationToken(true));
}
catch (TaskCanceledException)
{
Console.WriteLine("Unreachable code");
}
try
{
int result = await task;
}
catch (TaskCanceledException)
{
Console.WriteLine("Awaiting a canceled task");
}
설명서를 가능한 예외의 2 개 부분이 있다면 그것은 명확 수 있습니다 :
- "정기"동기 예외 (예 :
ArgumentNullException
및 ObjectDisposedException
)만을 반환 작업에서 대기에 의해 발생 될 수
- "비동기"비동기 예외는 (예를 들어,
TaskCanceledException
)
은 당신은 당신의 질문에 연결된 사용자가 페이지의 예를 확인해 봤어? – zerkms
@zerkms, 예제를 확인했습니다. TaskCanceledException은 Task.Run()이 아니라 Task.Wait() 메서드에 의해 throw됩니다. Task.Run()이 TaskCancelledException을 throw하는 조건을 이해하려고합니다. – Alex