इसके साथ System.Threading.Tasks.Task<TResult>
, मुझे उन अपवादों का प्रबंधन करना होगा जिन्हें फेंक दिया जा सकता है। मैं ऐसा करने का सबसे अच्छा तरीका ढूंढ रहा हूं। अब तक, मैंने एक बेस क्लास बनाया है जो कॉल के अंदर सभी अनकैप्ड अपवादों का प्रबंधन करता है.ContinueWith(...)
अगर वहाँ एक बेहतर तरीका है कि मैं सोच रहा हूँ। या भले ही वह ऐसा करने का एक अच्छा तरीका है।
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
*/
});
}
}