我要实现的任务中使用了CCR项目的执行超时。基本上当我发布一个项目一个端口或排队任务的DispatcherQueue我希望能够中止任务或者其上运行的,如果它需要比一些配置时间较长的线程。我怎样才能做到这一点?

有帮助吗?

解决方案

你能确定你问?你运行的调度长寿命的任务?注销线程会破坏CCR模型,所以你需要能够发送信号给线程完成其工作和产量。假设它是没有完成足够快的循环,你可能会选择入队的计时器:

var resultTimeoutPort = new Port<DateTime>();
dispatcherQueue.EnqueueTimer(TimeSpan.FromSeconds(RESULT_TIMEOUT), 
                             resultTimeoutPort);

和确保阻塞线程必须resultTimeoutPort可用的参考。在阻挡环,出口条件之一可能是:

do
{
    //foomungus amount of work
}while(resultTimeoutPort.Test()==null&&
       someOtherCondition)

如果我找错了树请张贴更多的信息。

其他提示

您可以注册在你的CCR开始的线程(Thread.CurrentThread)“接收”的处理程序(或在通过委托调用你的方法的方法)。然后,你可以做你的定期检查并在必要时基本上,如果你手动创建线程,你会做同样的方式中止。美中不足的是,如果你使用自己的Microsoft.Ccr.Core.Dispatcher用固定数量的线程,我不认为有办法让这些线程回来,一旦你放弃他们(根据我的测试)。所以,如果您的调度员有5个线程,你就只能放弃5次发布之前将不再不管什么任务已经登记工作。不过,如果你使用CLR线程池构建DispatcherQueue,你放弃任何CCR线程将被自动替换,你不会有这个问题。从我所看到的,虽然CCR调度建议,我认为使用CLR线程池是在这种情况下要走的路。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top