1

私はタイマーに関する負荷と目標を達成するためのオプションを読んでおり、system.timers.timer を使用して間隔を正しく設定する必要があると考えています。

私はこれを行う方法を知っていると思いますが、どこでそれを行うべきかわからないのですが、私のビュー、コントローラー、global.asax で行うのですか?

たぶん、タイマーをまったく使用しないでください。

私が探しているのは、1 時間ごとに if ステートメントを実行し、その if の結果に応じてビューを更新する最良の方法です。

4

4 に答える 4

4

通常、Web アプリ (MVC または WebForms) は、スケジュールされたタスクを実行するのに最適な場所ではありません。それは可能ですが、IIS のリサイクル アプリケーション プールやその他の異常が発生する可能性があります。これは、Web アプリにとっては便利ですが、タスクを確実にスケジュールするのを妨げる可能性があります。

多くの開発者 (そして私のお気に入りも) は、タスクをWindows Serviceでスケジュールします。これをインストールして、サーバーの起動およびシャットダウン時に正常に起動および停止するように設定できます。その後、ロギングやその他のヘルス モニタリングを設定して、スケジューラ サービスの状態を監視できます。

ただし、タスクが純粋に SQL ベースである場合は、SQL Server の組み込みのスケジューリング (または他のデータベースで同様のもの) を使用することをお勧めします。もう 1 つの方法は、オペレーティング システムのスケジューラを使用することです。

編集

ビューを結果で更新することに関しては、「TaskStatus」(新規、待機中、実行中、中止、失敗、キャンセル、完了) や「TaskResult」(成功の場合は空、失敗の場合はエラー メッセージ)。その後、データベースから情報を取得することにより、結果ビューでこの情報を表示およびフィルタリングできます。

于 2012-11-13T09:18:26.540 に答える
2

JavaScript - On Your Page: JavaScript を使用して、必要な関数であるコントローラー > アクションにリダイレクトできます。

<script type="text/JavaScript">
setTimeout("location.href = '/YourDefineUrlPathHere';",1500);
</script>

HTML Meta tag - On Your Page: ビューアクションを再度呼び出したい場合 (つまり、リフレッシュしたい場合) は、メタタグを介して実行できます。

<head>
<meta http-equiv="Refresh" content="15;url='/YourDefineUrlPathHere'"> 
<!—‘15’ is number of seconds you want to wait-- >
</head>

Timers – in your controller

aTimer = new System.Timers.Timer(10000);
aTimer.Elapsed += new ElapsedEventHandler(YourMethodHere);
aTimer.Interval = 2000;
aTimer.Enabled = true;

MSDN: タイマーを参照してください。

  • タイマーは、長い間Calingを維持したい場合、あまり効率的な解決策ではありません

ただし、別の方法で、結果を達成するためのより「標準的な」方法は、この方向でそれを追求したい場合、このリンクが大いに役立つ可能性があるため、ウィンドウ サービスを使用できると思います。 Windows サービス アプリケーションの概要

于 2012-11-13T09:34:46.853 に答える
0

「ビューを更新する」とはどういう意味ですか?

MVC ビューはクラスです。オブジェクトには値があるため、オブジェクトを「更新」することしかできません。ユーザーがページをリクエストすると、ビューがインスタンス化されます。

ユーザーがブラウザでページを常に開いていて、1 時間ごとに更新されるようにする場合は、クライアントの JavaScript でタイマーを使用して、1 時間ごとにページをリロードできます。

1 時間ごとに変化するデータに応じて、ユーザーがページを開いた結果を更新する場合は、データベースに最終更新時刻を保存し、ビューの実行時にデータが 1 時間以上経過しているかどうかを確認します。そうである場合は、コントローラーで if ステートメントを実行します。

于 2012-11-13T09:33:51.350 に答える
-1

Azure 関数を使用します。タイマー トリガーを使用して、スケジュールされたタスクを実行できます。かなりいい。

https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview

于 2019-04-03T23:52:42.430 に答える