あるオブジェクトの「StrategyState」を毎秒再計算したい。そのためのタイマーを作成したくありません。同時に、別のスレッドから「StrategyState」プロパティにアクセスできるためです(また、タイマーは私の単純な問題には重すぎる可能性があります)。StrategyStateタイプを自分で次のように定義しました。
public enum StrategyState
{
OnlyKill,
Working,
ClosingStage1,
ClosingStage2,
Closed
}
あるスレッドからそのようなオブジェクトを書き込み、別のスレッドから読み取ることが「スレッドセーフ」であるかどうかはわかりません。
だから私は自分のStrategyState State
フィールドを次のように「怠惰に更新」しようと考えていました。
....
if ( /* State was not updated for one second or more. */ ) {
RecalculateState()
}
switch (State) {
.... // Work
レイテンシをあまり追加せずに、状態が1秒以上更新されなかったことをテストするにはどうすればよいですか?
明らかにストップウォッチを作成することはできますが、さまざまなスレッドのさまざまなオブジェクトについて、約50の状態を完全に更新する必要があることに注意してください。システムに50個のストップウォッチを追加する必要があるかどうかわかりません。おそらく、Stopwatchクラスはスレッドセーフである可能性が高いため、Stopwatchを1つ追加して共有することをお勧めします。
あなたは何を提案できますか?