c# - 实现异步代码的自动重启
问题描述
我有一些长时间运行的代码:
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();
有没有更好的选择?有推荐的模式吗?这似乎是一项几乎微不足道的任务,但我找不到任何东西。
解决方案
推荐阅读
- python - 我在使用 pip 安装 pyinstaller 时遇到问题
- java - 文档中的 Drools 示例不起作用
- reactjs - React - 重新计算子组件中的值
- c# - 用于捕获组的正则表达式无法识别
- java - 如何在 android studio 的一项活动中组合类似的活动?
- python - 如何在python中修复“IndexError:列表索引超出范围”
- javascript - 将对象数组转换为具有唯一键的对象的最高效方法是什么
- java - 努力将主要方法连接到java类
- git - 如果我们更改 `git config core.hooksPath`,如何恢复为默认值
- javascript - 如何在不使用Jquery的情况下仅在javascript中单击一个按钮时禁用两个按钮