Я хочу сделать что-то вроде следующего - в основном я вызываю операцию async, которая вызовет обратный вызов в другом потоке, и я хочу дождаться завершения его "inline". Мое беспокойство заключается в том, что изменения переменных, разделяемых потоками (строка и событие), могут не синхронизироваться из-за того, что они хранятся в регистре, например. Если бы они были переменными-членами, я мог бы отметить их изменчивым, но волатильным не может использоваться для локальных переменных, созданных в стеке. Я мог бы использовать переменные-члены, но я думаю, что его очиститель не загромождает мой класс, сохраняя его локальным.
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