我有一个具有任务的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();
}
正如您所看到的,我正在停止添加要处理的新项目,但我仍然认为服务在所有内容完成之前就已停止。
任何想法??
干杯
答案 0 :(得分:0)
您需要致电ParallelLoopState.Stop以防止处理任何新记录。有关详细信息,请参阅How to: Stop or Break from a Parallel.For Loop。