를 사용하면 System.Threading.Tasks.Task<TResult>
발생할 수있는 예외를 관리해야합니다. 최선의 방법을 찾고 있습니다. 지금까지 호출 내에서 잡히지 않은 모든 예외를 관리하는 기본 클래스를 만들었습니다..ContinueWith(...)
더 나은 방법이 있는지 궁금합니다. 또는 그것이 좋은 방법이라고해도.
public class BaseClass
{
protected void ExecuteIfTaskIsNotFaulted<T>(Task<T> e, Action action)
{
if (!e.IsFaulted) { action(); }
else
{
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
{
/* I display a window explaining the error in the GUI
* and I log the error.
*/
this.Handle.Error(e.Exception);
}));
}
}
}
public class ChildClass : BaseClass
{
public void DoItInAThread()
{
var context = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew<StateObject>(() => this.Action())
.ContinueWith(e => this.ContinuedAction(e), context);
}
private void ContinuedAction(Task<StateObject> e)
{
this.ExecuteIfTaskIsNotFaulted(e, () =>
{
/* The action to execute
* I do stuff with e.Result
*/
});
}
}