gpt4 book ai didi

c# - 任务 .net4 和 Windows 服务停止

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:50 26 4
gpt4 key购买 nike

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

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

有什么想法吗??

干杯

最佳答案

您需要调用 ParallelLoopState.Stop以防止处理任何新记录。有关详细信息,请参阅 How to: Stop or Break from a Parallel.For Loop .

关于c# - 任务 .net4 和 Windows 服务停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11564572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com