Web APIを開発しています(これはかなりうまくいきます)。何が欠けている?ここ はGet
アクションのサンプルコードです:要求が受信されるとx秒後にイベントをトリガーするだけでなく、実行前にキャンセルする
public IEnumerable<xxxx> Get()
{
IEnumerable<xxxx> yyyy = new List<xxxx>();
//get yyyy from database
timer = new Timer();
timer.AutoReset = true;
timer.Enabled = true;
timer.Interval = 5000; //miliseconds
timer.Elapsed += timer_Elapsed;
timer.Start();
return yyyy;
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
//code to be executed when timer elapses...
}
ので、タイマーは初期化され、5秒間隔でElapsed
イベントを発生します。同じクライアントからの別の要求を以内に受信された場合
- 初期化要求-1
- 初期タイマ-1
- :次の後続の要求では、これは予想される動作は、そのようなものである....
を続行します5秒、タイマーは経過したイベントを発生させてはいけません。
- 5秒以内に同じクライアントから要求が受信されない場合、タイマーは経過してイベントを発生させる必要があります。
また、タイマーはクライアントとは関係ありません。ここで
これに関連し、さらにビジネスシナリオです.... 私はオン時に電子機器によって消費されたWeb APIを開発しています。電源が供給されている間、デバイスはON状態を維持し続けます。ユーザーがスイッチをオフにするとすぐに、サーバーへの要求は停止します。
これらのステータスは、デバイスがオンかオフかに関係なく、データベースに更新されます。今は、デバイスの電源が切れたとき(デバイスがリクエストの送信を停止した場合にサーバが何も知らないために複雑になる)を識別することが難しい部分でした。したがって、各デバイスには別個のタイマーがあります。
どのようにクライアントを特定しますか? –
'Elapsed'の中でどのようなコードを実行しますか?私はこれがXYの問題だと思う。 –
私は本当にクライアントを特定する必要はありません....私の実装はクライアントとは関係ありません。実装は、すべてのクライアントが似ており、同じデータを提供すると仮定しています...しかし、他の基準に基づいて複数のタイマーを持つことは可能です。 –