Với System.Threading.Tasks.Task<TResult>
, tôi phải quản lý các ngoại lệ có thể được ném ra. Tôi đang tìm cách tốt nhất để làm điều đó. Cho đến nay, tôi đã tạo một lớp cơ sở quản lý tất cả các trường hợp ngoại lệ chưa được giải quyết bên trong lệnh gọi của.ContinueWith(...)
Tôi tự hỏi nếu có cách nào tốt hơn để làm điều đó. Hoặc ngay cả khi đó là một cách tốt để làm điều đó.
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
*/
});
}
}