我的问题:
当遍历“ 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秒钟,然后再次触发异常。