amibar / SmartThreadPool

A .NET Thread Pool fully implemented in C# with many features
http://www.codeproject.com/Articles/7933/Smart-Thread-Pool
Microsoft Public License
507 stars 182 forks source link

System.InvalidOperationException when Cancel ThreadPool #16

Open CyrilJ opened 7 years ago

CyrilJ commented 7 years ago

Hello,

I'm using this library for long-times but i recently had a problem :

Here the call stack (french sorry) :

System.InvalidOperationException: La collection a été modifiée; l'opération d'énumération peut ne pas s'exécuter. à System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) à System.Collections.Generic.Dictionary`2.ValueCollection.Enumerator.MoveNext() à Amib.Threading.SmartThreadPool.Cancel(Boolean abortExecution)

When watching the code of the method i think, it must create a copy of the values before looping on it. Replace :

foreach (ThreadEntry threadEntry in _workerThreads.Values)

by

var threadEntrys = _workerThreads.Values.ToList() foreach (ThreadEntry threadEntry in threadEntrys )