Với System.Threading.Tasks.Task<TResult>
, tôi phải quản lý các ngoại lệ có thể bị ném. 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 ngoại lệ chưa được thực hiện bên trong cuộc gọi của .ContinueWith(...)
Cách tốt nhất để bắt ngoại lệ trong Công việc là gì?
Tôi tự hỏi liệu có cách nào tốt hơn để làm điều đó không. Hoặc thậm chí nếu đó là một cách hay để 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
*/
});
}
}
Làm cách nào bạn biết loại ngoại lệ trong phương pháp ẩn danh? Nếu tôi làm t.Exception, intellisense sẽ không phơi bày các thuộc tính innerexception, message ... etc ... – guiomie
@guiomie 't' * là * ngoại lệ. – casperOne
ngữ cảnh không được xác định là gì? – MonsterMMORPG