实现异步代码的自动重启

时间:2018-06-07 14:54:53

标签: c# async-await

我有一些长时间运行的代码:

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();

还有更好的选择吗?有推荐的模式吗?这似乎是一项几乎无足轻重的任务,但我找不到任何东西。

0 个答案:

没有答案