Как переменные, захваченные замыканием, взаимодействуют с разными потоками? В следующем примере кода я хотел бы объявить totalEvents как volatile, но С# не разрешает это.
(Да, я знаю, что это плохой код, это просто пример)
private void WaitFor10Events()
{
volatile int totalEvents = 0; // error CS0106:
_someEventGenerator.SomeEvent += (s, e) => totalEvents++;
while(totalEvents < 10)
Thread.Sleep(100);
}
РЕДАКТИРОВАТЬ. Люди, похоже, немного теряют смысл моего вопроса. Я знаю, что не могу использовать volatile
для локальных варов. Я также знаю, что код кода примера плох и может быть реализован другими способами, поэтому мой отказ от "плохого кода". Это было просто для иллюстрации проблемы.
Во всяком случае, казалось бы, нет возможности принудительно изменять волатильную семантику на захваченные локальные переменные, поэтому я буду реализовывать другой способ. Спасибо за ответы, хотя я все-таки узнал пару полезных вещей.:)