У меня есть несколько строк метода, которые я хотел бы гарантировать, что при выполнении этих команд не происходит переключения контекста на другой поток? Да, реструктуризация - это вариант, но сейчас было бы гораздо целесообразнее, если бы я мог это сделать.
Возможно ли это? Если нет, то знает ли кто-нибудь причину решения?
Редактировать: Причина, по которой я спрашиваю, состоит в том, что у меня есть класс, отвечающий за возвращение значения, значение предоставляется через событие, поэтому при вызове GetValue () поток должен блокироваться до тех пор, пока событие поднято. Итак имеем:
public class ValueResolver {
IPersistentNotifier _notifier;
IValueMonitor _monitor;
Value _value;
ManualResetEvent _resolvedEvent = new ManualResetEvent(false);
public ValueResolver(IPersistentNotifier notifier, IValueMonitor monitor) {
_notifier = notifier;
_monitor = monitor;
_monitor.ValueAcquired += ValueAcquired;
}
public Value GetValue() {
_value = null;
persistentNotifier.Show("Getting Value")
_monitor.Start();
_resolvedEvent.WaitOne(60000, false);
return _value
}
public void ValueAcquired(Value val) {
_value = val;
_monitor.Stop();
_notifier.Hide();
_resolvedEvent.Set();
}
}
Единственный способ, которым я могу думать о написании теста для этого, это что-то вроде (в насмешках на носорога)
var monitor = MockRepository.GetMock<IValueMonitor>()
monitor.Expect(x=>x.Start()).Do(new Action(() => {
Thread.Sleep(100);
monitor.Raise(y=>y.ValueAcquired, GetTestValue());
});
но любые предложения приветствуются.