using System.Collections.Concurrent; namespace ConsoleApp2.Services; /// /// 处理上下文类,标识处理进度 /// public class ProcessContext { private int _inputCount; private int _transformCount; private int _outputCount; private int _finishedTaskCount; private ConcurrentBag _exceptionList = new ConcurrentBag(); public bool IsInputCompleted { get; private set; } public bool IsTransformCompleted { get; private set; } public bool IsOutputCompleted { get; private set; } public int InputCount { get => _inputCount; private set => _inputCount = value; } public int TransformCount { get => _transformCount; private set => _transformCount = value; } public int OutputCount { get => _outputCount; private set => _outputCount = value; } public void AddException(Exception ex) { _exceptionList.Add(ex); } public void AddFinishTask() => Interlocked.Increment(ref _finishedTaskCount); public int FinishTaskCount { get => _finishedTaskCount; } public ConcurrentBag GetExceptions() { return _exceptionList; } public void CompleteInput() => IsInputCompleted = true; public void CompleteTransform() => IsTransformCompleted = true; public void CompleteOutput() => IsOutputCompleted = true; public void AddInput() => Interlocked.Increment(ref _inputCount); public void AddInput(int count) => Interlocked.Add(ref _inputCount, count); public void AddTransform() => Interlocked.Increment(ref _transformCount); public void AddTransform(int count) => Interlocked.Add(ref _transformCount, count); public void AddOutput() => Interlocked.Increment(ref _outputCount); public void AddOutput(int count) => Interlocked.Add(ref _outputCount, count); }