私はいくつかの行を持っていますが、これらの実行中に他のスレッドへのコンテキスト切り替えがないことを確認したいのですが?はい、再設計はオプションですが、これを行うことができれば、現在のところはるかに便利です。C#でコンテキストスイッチなしでアトミック操作を強制する方法はありますか?
これは可能ですか?そうでなければ誰もが決定の背後にある推論を知っていますか?
編集:の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();
}
}
唯一の方法は、(Rhinoのモック中)
var monitor = MockRepository.GetMock<IValueMonitor>()
monitor.Expect(x=>x.Start()).Do(new Action(() => {
Thread.Sleep(100);
monitor.Raise(y=>y.ValueAcquired, GetTestValue());
});
のようなものですが、何か提案は歓迎されています。だから我々は持っています。
コンストラクタの署名に誤字はありますか?私は抽象型IPersistentNotifierがPersistentNotifierではなく(IPersistentNotifierの証明であると仮定して)渡されると考えていたでしょう。 –
はい、コピー貼りスキルの欠如によるタイプミス –