 <blockquote> <p>"The dictionary passed in, is constantly increasing in size"</p> </blockquote> <p>Do you mean that it's being modified while you're executing this code? That's a no-no. I suspect the <code>ToList</code> call is failing due to this. (After <code>ToList()</code> has executed, the list should be effectively separate from the dictionary.)</p> <p>Basically <code>Dictionary&lt;TKey, TValue&gt;</code> doesn't support concurrent reading and writing. You might want to look at <a href="http://msdn.microsoft.com/en-us/library/dd287191.aspx" rel="nofollow noreferrer"><code>ConcurrentDictionary&lt;,&gt;</code></a> which allows you to iterate over it while another thread is writing.</p> <p>One suggestion to improve performance when it's all working: call <code>side.ToString()</code> <em>once</em> at the start of the method, instead of on every single loop iteration.</p>