2

特定の時間にイベント (電話) を発生させることに依存するアプリがあります。共有ホスティングを使用しているため、Windows サービスまたは cron ジョブをセットアップすることはできません。

/CheckCalls などの URL があり、今から +/- 60 秒後に予定されている通話があるかどうかを照会し、それらを起動します。

これを定期的に bash スクリプト経由で (または cron サービス経由で) 呼び出します。

コントローラーで、実行の開始時に遅延 (スリープ (2000) など) を使用して新しいスレッドを起動した場合、コントローラーが終了してから 2 秒後にスレッドが生きていることを期待できますか?

このようにして、a) 重複を回避し、b) 正しいタイミングで物事が進むようにすることができました。

以下のように、 Thread.Sleep() は私の質問の焦点では​​ありません。別の方法を読んで使用しましたが、疑問はまだ残っています: どこかの有料ホスティング環境にいる場合、2 分間存続する可能性のあるページでバックグラウンド スレッドを起動し、それが実行されることを期待できますか?

編集: このトピックを扱っているこのスレッドを見つけ、これを実装するためのハックとして HttpRuntime.Cache を使用しています。

おそらくもっと興味深いのは、私が恐れていたことを述べているスレッドのコメントです。他に何も起こっていない場合、タイマーはアプリケーションプールを維持しません。

https://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

4

2 に答える 2

2

Thread.Sleep の使用は、いくつかの理由から設計上の選択として適切ではありません。

1) スレッドがスリープしている間、スレッドをブロックします。2) スレッド プール内のスレッドを使い果たすため、このソリューションはまったく拡張できません。3) オペレーティング システムや同じオペレーティング システム (Windows) のバージョンによっても異なるタイム スライスまたはクォンタムが作用するため、これは不適切なタイミング メカニズムです。

この前の SO の質問は、Thread.Sleep が悪い理由についての詳細を提供します。

Thread.Sleep が有害な理由

于 2013-06-14T02:48:52.737 に答える
1

ここでは、この記事では、必要なもののようなものを処理する方法について説明します。

http://asmiki.wordpress.com/2011/05/25/using-quartz-net-enterprise-scheduler-to-schedule-jobs-in-asp-net-mvc-application/

サイトが一定時間アイドル状態になると AppPool が自動的にシャットダウンするため、スケジューラが失敗することがあります。http://www.uptimerobot.comを使用すると、5 分ごとに Web アプリに ping が送信されるため、AppPool が維持されます。

于 2013-06-26T20:05:06.403 に答える