web-dev-qa-db-ja.com

MVC4 C#でタスクをスケジュールする方法

私のウェブサイトに通知システムを作成したいですか?(スタックオーバーフローのようなもの)
24時間ごとにユーザーに通知をメールで送信するタスクをスケジュールするにはどうすればよいですか?

MVC4を使用できますか、それともWindowsサービスを使用する必要がありますか?

編集:
MVC4アプリ内で3か月にFluentSchedulerを使用した経験。
FluentSchedulerは設定と使用が簡単ですが、タスクを実行することはありません。実行される場合と実行されない場合があります。
スケジューリングの最良の方法はWindows Service特定の時間にタスクが実行されるようにします。

21
Mohammad Dayyan

これは素晴らしいスケジューラであることがわかりました FluentScheduler

使用法:

// Schedule an ITask to run at an interval
    Schedule<MyTask>().ToRunNow().AndEvery(2).Seconds();
16
heads5150

.Net Job Schedulerが必要です。ここに良いものがあります: http://quartznet.sourceforge.net/

7
phnkha

ATrigger スケジューリングサービスを使用できます。 。Netライブラリ を使用して、オーバーヘッドなしでスケジュールされたタスクを作成することもできます。エラーログ、分析、タスクリスト、その他の利点。

免責事項:私はATriggerチームに属していました。それはフリーウェアであり、私には商業目的がありません。

3
Kousha

多分あなたはスケジュールされたタスクを使いたいです。 MVCでこれを行うのは悪い考え(責任の混合)であり、Windowsサービスの構築はやり過ぎに見えます(常に何かを実行する必要がないためです)。

2
Jordi

まず第一に;

  1. NugetパッケージInstall-Package FluentSchedulerを追加
  2. レジストリといくつかのコードを継承するレジストリクラスを追加する
// Schedule a simple task to run at a specific time
Schedule(() => System.Diagnostics.Debug.Write("This is from service " + DateTime.Now.Second+"\n"))
               .ToRunNow().AndEvery(2).Seconds();
  1. そのレジストリクラスをTaskManagerのGlobal.asax.csのApplication_Startに登録します。
TaskManager.Initialize(new Test());

GitHub

1
Baqer Naqvi

Windowsのスケジュールタスクを使用しています。

私はbdにレコードを入力するよりも小さなアプリを作成してから、このrecordId(Guid)をパラメーターとして使用してWebサイトにアクセスします。

MVCで、IDが存在するかどうかを確認し、存在する場合はタスクを実行し、DB内のレコードを削除します。存在しない場合は無視します。

この方法では、パラメーターを使用してスケジュールを追加できません。新しいスケジュールされたタスクが必要になるたびにアプリを更新せずに。 「myapp.exe/MyNewTaskName」のような新しいタスクを追加するだけです

これが誰かを助けることを願っています;-)

1
Benoit

組み込みオプションのQueueBackgroundWorkItemもあります。これは.Net 4.5.2と MVCでの使用方法のガイド で追加されました。

前述のFluentSchedulerに加えて HangFire もあります。そして、Azureへの展開を計画している場合 これにはいくつかの異なるサービスがあります

0