我想在使用CCR的项目中执行任务的超时。基本上,当我将一个项目发布到端口或将任务排入DispatcherQueue时,我希望能够中止该任务或其运行的线程,如果这需要比配置的时间更长的时间。我怎样才能做到这一点?如何中止CCR线程任务?
回答
你能确认你在问什么吗?您是否在Dispatcher中运行长期任务?杀死线程会破坏CCR模型,因此您需要能够向线程发出信号以完成其工作并产生收益。假设它是没有完成足够快的一个循环,你可能会选择排队定时器:
var resultTimeoutPort = new Port<DateTime>();
dispatcherQueue.EnqueueTimer(TimeSpan.FromSeconds(RESULT_TIMEOUT),
resultTimeoutPort);
,并确保阻塞线程必须resultTimeoutPort提供参考。在阻塞环中,其中一个退出条件可能是:
do
{
//foomungus amount of work
}while(resultTimeoutPort.Test()==null&&
someOtherCondition)
如果我吠叫错误的树,请发布更多信息。
除了我试图避免对foomungus工作代码进行更改之外,您正朝着正确的方向前进。此外,该代码可能并不总是有循环,有时我只是希望它在时间t尝试并完成,如果不能,就离开。我一直在做一些阅读,看起来可能没有办法获得我想要的确切行为,因为我会按照你所说的打破模型。 – SpaceghostAli 2009-07-20 13:57:14
您可以在CCR“Receive”处理程序(或通过代理调用您的方法的方法)的开头注册线程(Thread.CurrentThread)。然后,如果需要,您可以进行定期检查并在必要时放弃,这与您手动创建线程的方式基本相同。问题是,如果你使用你自己的Microsoft.Ccr.Core.Dispatcher和固定数量的线程,我不认为有一种方法可以在你中止它们(基于我的测试)时返回这些线程。因此,如果您的调度程序有5个线程,那么无论已注册哪些任务,发布将不再工作,您只能中止5次。但是,如果使用CLR线程池构造DispatcherQueue,则任何您中止的CCR线程都会自动替换,您不会遇到此问题。从我所看到的情况来看,虽然推荐使用CCR调度程序,但我认为使用CLR线程池是在这种情况下的方法。
- 1. 微软的CCR vs任务并行库
- 2. MVC 5 - IIS停止任务线程
- 3. 如何检查任务线程是否被阻止
- 4. 如何停止控制台暂停我的线程和任务?
- 5. 微软CCR获得任何牵引力?
- 6. 如何用C中止任务并行库中的特定线程
- 7. 如何中止线程
- 8. 线程和任务
- 9. 任务并行库线程中止/中断
- 10. 如何停止在C#中线程内安全运行的所有C#任务
- 11. Celery,Django ..制作任务/线程启动子任务/线程?
- 12. 加入任何终止的线程
- 13. 如何更改lpSolve中的重量限制?线性编程,最大化CCR DEA
- 14. 启动线程线程与任务类
- 15. 在异步WCF服务中使用CCR
- 16. 从任何窗体或线程停止线程
- 17. IoTBrowser,从任务/线程
- 18. 多线程和多任务
- 19. 长任务线程的Webservices
- 20. 的Java多线程任务
- 21. C#使任务线程Forground
- 22. 多线程独立任务
- 23. 如何限制任务使用线程池中的所有线程?
- 24. 等待主线程停止,直到任务被异步线程处理
- 25. Parallel.ForEach:如何阻止主线程,直到完成所有并行任务
- 26. 如何在c#metro应用程序中停止异步任务
- 27. Android ::在主线程中执行其他任务之前阻止主线程完成主线程
- 28. 如何停止Django线程
- 29. 如何终止线程
- 30. 如何停止线程?
很酷。机器人问题。 – Will 2009-07-13 16:38:28