.NET асинхронные делегаты и члены экземпляров объектов - PullRequest
1 голос
/ 16 июля 2010

При первом использовании асинхронных делегатов .NET я с удивлением обнаружил, что при изменении значения элемента экземпляра (например, int) в асинхронном методе (запущенном в новом потоке) значение элемента экземпляраработа в исходном потоке также была изменена.

Я думал, что при создании нового потока значения элементов экземпляра копируются из исходного потока, но затем изолируются от исходного.

Может кто-топомогите мне лучше понять, что происходит под одеялом?В моем исследовании большинство книг / статей говорят о статических переменных, но не о переменных экземпляра.Спасибо!

1 Ответ

1 голос
/ 16 июля 2010

Асинхронные делегаты не копируют и не делают ваши поля локальными для потоков. Все, что они делают, это ставят в очередь делегата для запуска в потоке из пула потоков. То, что делает этот делегат, влияет на то, что он собирался затронуть все это время. Это может легко означать, что сделанные изменения не являются поточно-ориентированными.

...