3
작업 계속 어딘가에 던져진 예외를 처리하는 가장 좋은 방법은 무엇입니까?작업 계속 어딘가에서 처리 된 핸들 예외
예를 들어, 아래에 간단한 작업 연속 (updateMessages
->updateInterface
)이 있지만 실제로는 두 개 이상의 작업 체인 일 수 있습니다. 나는 체인에서 발생할 수있는 모든 결함에서 계속되는 일반적인 예외 "catch all"태스크를 원합니다.
내가 이것을 수행하는 방법은 Action
(예외를 관찰하고 기록)을 정의하고 각 작업을 TaskContinuationOptions.OnlyOnFaulted
으로 설정하는 것입니다. 아마도 이것을하는 더 좋은 방법이 있을까요?
Task updateMessages = Task.Factory.StartNew(() =>
{
// Do stuff
});
Task updateInterface = updateMessages.ContinueWith(task =>
{
// UI updates
},
System.Threading.CancellationToken.None,
TaskContinuationOptions.NotOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext());
Action<Task> failureAction = new Action<Task>(failedTask =>
{
// Observe and log exceptions
});
updateMessages.ContinueWith(failureAction, CancellationToken.None,
TaskContinuationOptions.OnlyOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext());
updateInterface.ContinueWith(failureAction, CancellationToken.None,
TaskContinuationOptions.OnlyOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext());
일부 컨트롤 업데이트가 필요하지 않으면 UI 스레드에있을 필요는 없습니다. 도우미 방법은 좋은 생각입니다. 감사합니다 :) – davenewza
위대한. 그 경우, 나는 그것이 항상 UI 스레드 (그 추가 비용) 이후 예약되지 말고, 오히려, 컨트롤이 컨트롤을 업데이 트 해야하는 경우, 그 컨트롤을 사용하여 호출합니다. (우리는 어쨌든 결함의 경우에 대해서만 이야기하고 있기 때문에 사소한 부분입니다.) –