我有一个具有任务的 Windows 服务,这些任务运行并行 foreach 来处理一些图像。
我现在需要做的是让服务 onstop 方法允许任务完成对已经在进行中的项目的处理,但不允许任何新项目开始。
以下是我的一些代码片段,以显示我所拥有的:
if (recordsToProcess != null && recordsToProcess.Any())
{
if (!_cancellationTokenSource.Token.IsCancellationRequested)
{
Parallel.ForEach(recordsToProcess, new ParallelOptions { MaxDegreeOfParallelism = MaxParallelThreadSetting }, currentRecord => _Processor.Process(currentRecord, _supportedFileTypes));
}
Task.WaitAll(); //Recently added not sure if needed
}
protected override void OnStop()
{
//Sets the cancel flag to stop the processing
_cancellationTokenSource.Cancel();
//Allows existing threads to complete
_logHandler.LogInfoMessage("Waiting On Cancel");
Task.WaitAll();
//Stop service and tidy up resources
_logHandler.LogInfoMessage("Stopping service");
base.OnStop();
}
如您所见,我正在停止添加要处理的新项目,但我仍然认为服务在一切完成之前停止。
有任何想法吗??
干杯