위의 주제에 대한 많은 질문이 있지만 새로운 질문을하기에 충분하다고 생각합니다. 나는 다음과 같은 Task
을 가지고 있고 계속해서 다양한 업무를 처리하고있다. Status
; TaskStatus.RanToCompletion
, TaskStatus.Canceled
및 물론 AggregateException
을 통해 TaskStatus.Faulted
을 거쳐야한다. 그 다음에 무슨 - 거기 AggregateException
의 가능성이 계속 내에서 발생되는 것으로 코드는이 모든 잘 작동하지만, 나는이 권리를하고있는 중이 야하는지 여부를 걱정TPL 및 예외 처리
Task<bool> asyncTask = Task.Factory.StartNew<bool>(() =>
asyncMethod(uiScheduler, token, someBoolean), token);
asyncTask.ContinueWith(task =>
{
// Check task status.
switch (task.Status)
{
// Handle any exceptions to prevent UnobservedTaskException.
case TaskStatus.RanToCompletion:
if (asyncTask.Result)
{
// Do stuff...
}
break;
case TaskStatus.Faulted:
if (task.Exception != null)
mainForm.progressRightLabelText = task.Exception.InnerException.Message;
else
mainForm.progressRightLabelText = "Operation failed!";
default:
break;
}
}
처럼 보인다?
Wait
이 내 asyncTask
에 없으며, 계속 진행하면 UI 스레드로 되돌아 가지 않습니다. 연속 내에서 던져진 예외를 잡으려면 반드시 이와 같은 작업을 수행해야한다는 뜻은 아닙니다.
Task parentTask = Task.Factory.startNew(() =>
{
Task<bool> asyncTask = Task.Factory.StartNew<bool>(() =>
asyncMethod(uiScheduler, token, someBoolean), token);
Task continueTask = asyncTask.ContinueWith(task =>
{
// My continuation stuff...
}
try
{
continueTask.Wait();
}
catch(AggregateException aggEx)
{
// Some handling here...
}
});
이렇게해도 작동합니까? 가장 좋은 방법은 무엇입니까?
언제나 감사합니다.
실제로 AggregateException을 던졌을 때 "완료되었습니다"라는 작업을 보았습니다. 이러한 종류의 오류 처리는 작동하지 않습니다. try/catch를 사용하지 않는 이유는 무엇입니까? –
백그라운드 스레드 또는 실제 연속 위임 메서드에서 호출되는 메서드를 의미합니까? – MoonKnight