0

かなり高速な再計算を毎秒実行する必要があります。それを行う最善の方法は何ですか?専用スレッドを使用していますThread.Sleepが大丈夫ですか?

        Task.Factory.StartNew(() => 
        {
            while (true)
            {
                RecalculateState();
                Thread.Sleep(1000);
            }
        }, TaskCreationOptions.LongRunning);
4

4 に答える 4

2

それは機能しますが、別の方法としてタイマーを使用することもできSystem.Threading.TimerますSystem.Timers.Timer

次のことを考慮する必要があります。

  • 状態の再計算に 1 秒以上かかる場合、どうしたいですか?
  • あなたのRecalculateStateメソッドは、任意のスレッドから呼び出されても完全に安全ですか?
于 2012-10-03T09:12:34.137 に答える
1

System.Timers.Timerを 1 秒間隔で使用できます。

すでに新しいスレッドで実行されています。

予想される間隔よりも長く実行される場合 RecalculateState(1000 の理由で)、重複する呼び出しに対処する必要があるため、何らかの方法でそのケースを管理する必要があることに注意してください。

考えられる解決策の 1 つは、メソッドの実行が終了した後にのみ新しいコードを実行し、実行時間と間隔の差を測定することです。しかし、これはそれほど簡単な作業ではありません。幸いなことに、誰かがすでにその問題について考えていました。

最新のビルドで時間依存の実行に特別な注意を払ったReactive Extensionsを見ることができます。

于 2012-10-03T09:12:20.760 に答える
0

これにはタイマーを使用することをお勧めします。

メンバー:

private readonly Timer _timer;

たとえば、コンストラクターでタイマーをインスタンス化します。

_timer= new Timer(OnTimerEllapsed, null, 0, 1000);

折り返し電話:

private void OnTimerEllapsed(object sender)
{
    RecalculateState();
}
于 2012-10-03T09:18:15.937 に答える
0

タイマーを使用して、オンタイム イベントを作成することはできませんか? このようなもの ?

Observable.Timer(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(1)).Timestamp()
       .Subscribe(MyOnTimedEventMethod);
于 2012-10-03T09:13:15.640 に答える