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