title: Are Parallel.Invoke and Parallel.ForEach essentially the same thing?
body: <p>And by &quot;same thing&quot; I mean do these two operations basically do the same work, and it just boils down to which one is more convenient to call based on what you have to work with? (i.e. a list of delegates or a list of things to iterate over)?  I've been searching MSDN, StackOverflow, and various random articles but I have yet to find a clear answer for this.</p>
  <p><strong>EDIT:</strong> <em>I should have been clearer; I am asking if the two methods do the same thing because if they do not, I would like to understand which would be more efficient.</em></p>
  <p>Example: I have a list of 500 key values. Currently I use a <code>foreach</code> loop that iterates through the list (serially) and performs work for each item.  If I want to take advantage of multiple cores, should I simply use <code>Parallel.ForEach</code> instead?<br />
  Let's say for arguments's sake that I had an array of 500 delegates for those 500 tasks - would the net effect be any different calling <code>Parallel.Invoke</code> and giving it a list of 500 delegates?</p>