重启已完成的任务

时间:2014-07-16 21:56:11

标签: c# task

我有一个在我的应用程序后台定期运行的任务。当我第一次运行它时一切正常,任务运行完美结束。但是第二次,之后每当我使用task.Start()时,它都会引发异常:

  

未处理的类型' System.InvalidOperationException'发生在mscorlib.dll中   附加信息:可能无法在已完成的任务上调用Start。

我确信我的任务功能已经结束了......如何定期运行任务?

2 个答案:

答案 0 :(得分:10)

Stephen Taub explains it(我实际上可以推荐阅读更多关于任务的文章)

  
      
  1. 问题:我可以在同一个任务上多次调用Start?
  2.         

    没有。任务只能从Created状态转换一次,并且Start会将Task转换为Created状态:因此,Start只能使用一次。任何在未创建状态的任务上调用Start的尝试都将导致异常。 Start方法使用同步来确保Task对象保持一致状态,即使并发多次调用Start ...只有其中一个调用可能成功。

..你也看到了什么。你可以使用例如一个计时器,每次都开始一个新的任务 如果您需要检查一次只能运行一个,则可以检查当前正在运行的任务的TaskStatus.RanToCompletion

答案 1 :(得分:2)

查看System.Threading.Timer,它可以让您定期执行回调方法。对于需要每小时,多次等运行的事情来说,它非常棒。如果您需要确保计时器只能同步运行(如果运行重叠),请不要忘记锁定回调方法体。 / p>