Единственное отличие состоит в том, что во втором сценарии вы закрываете переменную e
, которая эффективно перемещает переменную стека e
в пользовательский тип, который перемещается в кучу, чтобы вы не потеряли его.
Я думаю, это должно работать нормально.
Редактировать: Что касается производительности, то не должно быть существенной разницы между двумя сценариями. В сценарии 1 вы уже передаете исключение как state
методу QueueUserWorkItem
, который внутренне перемещает эту ссылку исключения в кучу. Единственное преимущество заключается в том, что при использовании замыкания компилятор создает для вас тип и сохраняет любые захваченные переменные в виде полей этого типа.