我有一些长时间运行的代码:
Action GetSomeAction()=> () => {
//some code that takes a long time...
};
我这样运行:
_currentTask = Task.Run(GetSomeAction());
如果它抛出异常,我需要确保它重新启动。起初,我写了这个:
async Task EnsureTaskExecution()
{
try
{
await _currentTask;
}
catch (Exception x)
{
Log.Error($"task exception: {x.GetType()} : {x.Message} {x.StackTrace} {x.InnerException?.GetType()} {x.InnerException?.Message}.");
//...?
}
}
如何正确重启?将它插入catch块似乎是个坏主意,因为它引入了递归:
_currentTask = Task.Run(GetSomeAction());
await EnsureTaskExecution();
还有更好的选择吗?有推荐的模式吗?这似乎是一项几乎无足轻重的任务,但我找不到任何东西。