Con System.Threading.Tasks.Task<TResult>
je dois gérer les exceptions qui pourraient être levées. Je cherche la meilleure façon de le faire. Jusqu'à présent, j'ai créé une classe de base qui gère toutes les exceptions non attrapées dans l'appel de la fonction .ContinueWith(...)
Je me demande s'il n'y a pas un meilleur moyen de le faire. Ou même si c'est un bon moyen de le faire.
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
*/
});
}
}