Поточная обработка и лямбда-выражения

Когда event.getSource() == bin истинно, ни один из вложенных операторов if не может быть истинным: if(event.getSource() == n1){

Также этот if всегда будет истинным, поскольку оператор присваивания pass = 1; if(pass == 1){

10
задан LOZ 14 August 2012 в 05:40
поделиться

2 ответа

Единственное отличие состоит в том, что во втором сценарии вы закрываете переменную e , которая эффективно перемещает переменную стека e в настраиваемый тип, который перемещается в кучу, поэтому вы не потеряете его.

Я думаю, это должно работать нормально.

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

14
ответ дан 3 December 2019 в 22:38
поделиться

Just to note, instead of the Lambda, you could do the same with an anonymous method, and it would also work in C# 2.0:

ThreadPool.QueueUserWorkItem(delegate(Object e) 
    { 
        Logger.Log(e as Exception); 
    });
1
ответ дан 3 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: