タスクを持つWindowsサービスがあり、それらのタスクは並列foreachを実行していくつかの画像を処理します。
私が今やらなければならないことは、service 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();
}
ご覧のとおり、処理する新しいアイテムの追加を停止していますが、すべてが完了する前にサービスが停止しています。
何か案は??
乾杯