İle System.Threading.Tasks.Task<TResult>
atılabilecek istisnaları yönetmem gerekiyor. Bunu yapmanın en iyi yolunu arıyorum. Şimdiye kadar, çağrı içindeki tüm yakalanmamış istisnaları yöneten bir temel sınıf oluşturdum..ContinueWith(...)
Bunu yapmanın daha iyi bir yolu olup olmadığını merak ediyorum. Ya da bunu yapmanın iyi bir yolu olsa bile.
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
*/
});
}
}