Я хочу сделать что-то вроде следующего - в основном я называю async операцию, которая позвонит обратный вызов в другом потоке, и я хочу подождать, пока он завершил «встроенный». Мое волнение состоит в том, что изменения переменных, общих через потоки (BAR & Event), не могут быть синхронизированы из-за хранения в регистрах. Если бы они были переменными-членами, я мог бы отметить их волатильным, но волатильный нельзя использовать на местных переменных, созданных на стеке. Я мог бы использовать переменные элемента, но я думаю, что его уборщик не загромождает мой класс, сохраняя его все местное.
Bar bar = null;
ManualResetEvent event = new ManualResetEvent(false);
foo.AsyncOperation(new Action(()=>{
// This delegate will be called in another thread
bar = ...
event.Set();
}));
event.WaitOne(timeout);
// use bar