diff --git a/Sally7/RequestExecutor/ConcurrentRequestExecutor.cs b/Sally7/RequestExecutor/ConcurrentRequestExecutor.cs index 375dddf..53fa242 100644 --- a/Sally7/RequestExecutor/ConcurrentRequestExecutor.cs +++ b/Sally7/RequestExecutor/ConcurrentRequestExecutor.cs @@ -192,6 +192,7 @@ private class JobPool : IDisposable { private readonly Channel jobIdPool; private readonly Request[] requests; + private volatile bool disposed; public JobPool(int maxNumberOfConcurrentRequests) { @@ -209,13 +210,17 @@ public JobPool(int maxNumberOfConcurrentRequests) } } - public void Dispose() => jobIdPool.Writer.Complete(); + public void Dispose() + { + disposed = true; + jobIdPool.Writer.Complete(); + } public ValueTask RentJobIdAsync(CancellationToken cancellationToken) => jobIdPool.Reader.ReadAsync(cancellationToken); public void ReturnJobId(int jobId) { - if (!jobIdPool.Writer.TryWrite(jobId)) + if (!jobIdPool.Writer.TryWrite(jobId) && !disposed) { Sally7Exception.ThrowFailedToReturnJobIDToPool(jobId); }