我想要完成的任务:我想每10小时运行一次任务。只有先前的任务完成,我才想开始一项新任务。如果以前的任务异常完成,我想立即/ 10小时延迟之前重新启动它。
我在做什么:我有一个每10小时运行一次task_1的timerA。我还有一个timerB,每小时检查一次task_1是否成功完成或异常完成。
伪代码:
class
{
public Task myTask;
main()
{
timerB = new Timer(e => myTask = myMethod(), null, 0, 1hour);
}
myMethod()
{
if(!myTask.IsCompleted)
{
await myTask;
}
else if(myTask.IsFaulted)
{
timerA.change(0, 10hours);
}
timerA = new Timer(
e => myTask = someMethodThatReturnsTask(),
null, 0, 10hours);
}
}
我的问题是:有人可以解释一下,如果不是有另一个timerB,有没有办法可以检查timerA中的任务是如何完成的,如果异常完成则立即重启任务? 这些计时器线程的顺序如何工作? 通常有一种更好的方法可以使用C#实现这一目标吗?
由于我不熟悉使用C#,我真的很感激任何指导。提前谢谢!