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