многопоточность и объем лямбда-переменных

Я использую класс, который управляет пулом потоков для запуска действий. Первоначально он был закодирован для выполнения действия (без параметров), и я назвал его так:

void LoadTasks()
{
   string param;

   // some code loops and changes param
   {
      threadPool.EnqueueTask(() => SomeMethod(param));
   }
}

Поскольку потоки работали, некоторые были в порядке, но иногда переменная param была не такой, как я ожидал ... это было "новее" значение, а не то, что я намеревался отправить в метод.

Изменение пула потоков для принятияAction и звонит без лямбды - вот такthreadPool.EnqueueTask(SomeMethod, param) - обошёл мою проблему.

Я вижу довольно много вопросов о C # lambdas о безопасности потоков. Например,принятый ответ лямбдыгораздо менее вероятно, чтобы быть потокобезопасным, чем вы ожидаете. Я'Я нахожу другие вопросы и ответы о лямбдах / затворах / ограничениях, чтобы сбить с толку. Поэтому я ищу объяснение лямбды и переменной области, в идеале относящиеся к проблеме в моем примере.

Ответы на вопрос(1)

Ваш ответ на вопрос