我有一个在我的应用程序后台定期运行的任务。当我第一次运行它时,一切正常,任务运行完美。但是第二次之后,每当我使用task.Start()
它时,都会引发异常:
mscorlib.dll中发生了类型为'System.InvalidOperationException'的未处理异常。其他信息:可能不会在已完成的任务上调用Start。
我确定我的任务功能已经结束了..我应该怎么做才能定期运行任务?
斯蒂芬·陶布(Stephen Taub)对此进行了解释(我实际上可以建议阅读他有关任务的更多文章)
- 问题:我可以在同一任务上多次调用“开始”吗?
不能。一个任务只能从Created状态过渡一次,而Start可以将Task从Created状态过渡:因此,Start只能使用一次。任何尝试在未处于“已创建”状态的任务上调用“启动”的尝试都会导致异常。Start方法使用同步来确保Task对象保持一致状态,即使Start被并发多次调用也是如此。这些调用中只有一个可以成功。
..这也是您所看到的。例如,您可以使用计时器并每次启动一个新任务。
如果您需要一次只检查一次,则可以检查TaskStatus.RanToCompletion
当前正在运行的任务
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句