Parallel.For перегрузки, которые принимают шаг в качестве третьего аргумента, были удалены из .NET 4; см. комментарии к http://blogs.msdn.com/b/pfxteam/archive/2009/05/26/9641563.aspx.
В связи с этим ваш вызов с 5 аргументами преобразуется в this overload :
For<TLocal>(Int32, Int32, Func<TLocal>, Func<Int32, ParallelLoopState, TLocal, TLocal>, Action<TLocal>)
И, очевидно, компилятор не может соответствовать типам аргументов.
Поскольку шаг в любом случае равен 1, просто удалите его.
Затем вам нужно будет исправить делегат тела, который должен иметь три параметра (поскольку локальная переменная потока теперь отделена от объекта состояния цикла), и добавить еще один делегат, который будет применен к локальным переменным потока для окончательного вычисления. В конце должно быть что-то вроде этого:
Parallel.For( 1, itemCount,
() =>
{ return new ThreadLocalStateCache()
{
Receipient = serMailObj.ReceipientList.Dequeue(),
mail = serMailObj.Email,
client = client
};
},
(i, loopState, threadLocal ) =>
{
doWork(i, threadLocal);
return threadLocal;
},
(threadLocal) => {}
);