2

我有一个具有任务的 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();
}

如您所见,我正在停止添加要处理的新项目,但我仍然认为服务在一切完成之前停止。

有任何想法吗??

干杯

4

1 回答 1

0

您需要调用ParallelLoopState.Stop来阻止处理任何新记录。有关详细信息,请参阅如何:从 Parallel.For 循环停止或中断

于 2012-07-19T15:53:52.700 回答