を使用すると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
*/
});
}
}