Mit System.Threading.Tasks.Task<TResult>
muss ich die Ausnahmen verwalten, die ausgelöst werden könnten. Ich suche nach dem besten Weg, das zu tun. Bisher habe ich eine Basisklasse erstellt, die alle nicht erfassten Ausnahmen innerhalb des Aufrufs von verwaltet.ContinueWith(...)
Ich frage mich, ob es einen besseren Weg gibt, das zu tun. Oder auch wenn es ein guter Weg ist, das zu tun.
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
*/
});
}
}