只有第一个完成的回调保持有效

时间:2019-06-11 20:27:39

标签: c# multithreading class timer

我的问题:

当遍历“ RouteManager”类实例的列表时,我为每个实例处理路由到目标的实例启动一个单独的回调计时器。这些回调应该无限期地运行,但是只有第一个完成的回调仍然有效。其他所有回调均在首次运行后结束。

背景:

当前,我正在尝试将图像路由到多个目的地(工作站),并创建了一个“ RouteManager”类,用于处理将图像移至每个目的地的所有详细信息。我调用数据库并检索所有活动目标,并建立路由管理器实例列表。我遍历这些实例并启动一个回调计时器,该计时器将路由图像块(如果可用)。以下是我用来完成此任务的相关代码块。

主要:

List<RouteManager> routeManagers = new List<RouteManager>();
var activeDestinations = dbQuery.GetActiveDestinations();

foreach (string activeDestination in activeDestinations)
{
       RouterConfiguration routerConfig = 
dbQuery.GetRouteConfigInfo(activeDestination);

       RouteManager routeManager = new RouteManager(routerConfig);
       routeManagers.Add(routeManager);
}

Parallel.ForEach(routeManagers, routeManager =>
{
    var local = routeManager;
    local.StartRouteScheduleMonitor(1000);
    local.StartRoutingStudies(5000);
    local.StartUpdatingRouteStatus(5000);
 });

Console.ReadLine();   

RouteManager类:

private int _routeScheduleInterval;
private static System.Threading.Timer routeDequeueTimer; 

private static EventWaitHandle routingHandle = new 
ManualResetEvent(initialState: true);

public void StartRoutingStudies(int interval)
{            
    _routeDequeueInterval = interval;
    var callBack = new System.Threading.TimerCallback(RouteStudies);
    routeDequeueTimer = new System.Threading.Timer(callBack, null, 
interval, Timeout.Infinite);
}

public void RouteStudies(object state)
{
    routingHandle.WaitOne();

    RouteImagesSequential(_DestinationName).Wait();
    routeDequeueTimer.Change(_routeDequeueInterval, Timeout.Infinite);
}        

预期行为:

每个类实例应调用其内部的“ RouteImagesSequentially”方法,直到完成,等待5秒钟,然后再次触发异常。

0 个答案:

没有答案