我有一个使用任务并行库实现的长时间运行的任务。当任务开始时,我抓取几个输入值和集合的快照,然后使用该信息执行各种操作。如果任何这些值或集合在任务运行时发生更改,我希望在完成后立即再次运行该任务。我应该创建一个新的任务还是有重用现有任务的方法?开始第二次迭代的最佳方式是什么?如何重新启动/重复使用重复性任务?
13
A
回答
11
创建一个新任务。
由于http://msdn.microsoft.com/en-us/library/dd270682.aspx指出,试图重新启动正在运行或已完成的任务不受支持。执行通常会引发异常的事情通常不是一个好主意,重新使用任务就是其中之一。
1
您不能再次启动现有的Task
。所以你有两种选择:
- 开始一个新的
Task
。这可能更干净。 - 在
Task
中运行循环,检查自上次以来是否发生了变化,如果有变化,则开始新的迭代。
+0
与上面相同的问题:您如何表示需要第二项任务? – SonOfPirate 2012-02-28 02:29:17
+0
很难说不知道你如何确定第二项任务是需要的。如果您想要在完成后重新启动,则可以使用事件。 – svick 2012-02-28 02:37:27
0
您还可以重构程序逻辑以使用函数指针(或VB.NET中的委托)。
相关问题
- 1. Android重复性任务
- 2. 重新启动恢复Android
- 3. Delajed Jobs中的重复性任务没有启动Rails?
- 4. 如何重用Azure启动任务?
- 5. 重新启动一个任务活动
- 6. 如何在构建后自动执行重复性任务?
- 7. 启动服务如何重复使用警报管理器
- 8. ASP中的重复性任务
- 9. 处理重复性任务的框架
- 10. 使用AlarmManager执行重复任务
- 11. 重复使用SSIS中的任务
- 12. 使用tokio_timer重复Rust任务
- 13. 使用IntentService执行重复任务
- 14. iPhone:重复后台任务
- 15. 如何加快重复Java任务
- 16. Webworks:如何运行重复任务
- 17. 重启芹菜是否会导致重复任务?
- 18. 重新启动服务器后重新启动WCF服务
- 19. Kafka连接任务重新启动`NoSuchMethodError:HttpServletRequest.isAsyncStarted`?
- 20. Android - 视频重新启动或恢复
- 21. Mysql在重新启动后恢复ONLY_FULL_GROUP_BY
- 22. 保存WindowState并在重新启动/重新登录后恢复
- 23. 当鼠标触及边界时,动画重复重新启动
- 24. 重复使用(重新打开)Oracle refcursor
- 25. RabbitMQ失败莫测,需要重新启动,重新启动修复问题
- 26. 如何重新启动Android服务,当它被重启中断?
- 27. 如何使滚动重复使用jQuery
- 28. 页面重新载入后如何重新启动任务流程?
- 29. 重置或重复使用CCAnimate动作
- 30. 如何在同一意图重新启动活动时避免重复处理
你会如何表示需要完成第二项任务?在原始任务运行之前可能会发生更改,直到完成后的某个时间。 – SonOfPirate 2012-02-28 02:28:45
基于这个标准,我认为你会做一个单一的,不终止任务轮询当前状态,如果状态改变,做你的事情。这里的基本要求是,这是异步发生的,以避免阻塞主线程。您需要放置某种标志来向Task表明应用程序正在关闭,并且应该终止。 – 2012-02-28 12:14:03
一个单一的,不终止的任务是我在想什么。我可以使用CancellationToken来处理应用程序何时关闭,但我不确定我应该使用哪种机制来标记我需要任务来执行我的算法。如果我使用AutoResetEvent,那么我将无法取消该任务的线程将被暂停等待事件。另一方面,我读到使用SpinWait是非常密集的CPU。 – SonOfPirate 2012-02-28 12:54:54