4

以前に mvc で非同期タスクを実行しようとしたことがないため、どちらの方向に進むかわかりません。

時間がかかる可能性のある大量のデータから Excel ファイルを生成するクラスがあります。ユーザーがリンクをクリックすると、「完了時に通知されます」というメッセージが表示され、タスクが開始され、Web アプリの使用を続行できるようになり、これが完了すると画面に通知が表示されるようにしたい完全、できればajax経由 同時にいくつかのタスクが実行されている可能性があります。タスクがまだ実行されているかどうかを確認できればよいでしょう。

これらのタスクはスケジュールされることはなく、常に「オンデマンド」で行われます

これに最も適した方法はどれですか? system.threading 、 signalrQuartz.netなどがあるのを見てきましたが、やり過ぎかもしれません。

ありがとう、

サム

4

2 に答える 2

4

クライアント側では、javascript ポーリング コードを作成する必要があります。
このようなもの:

(function poll(){
   setTimeout(function(){
      $.ajax({ url: "server/checkStatus", success: function(data){
        // check notification data and react accordingly
      }, dataType: "json"});
  }, 30000);
})();

以下も参照してください。

サーバー側では、次のようなオブジェクトのインスタンスを作成します (簡略化):

class MyTasks
{
   Dictionary<int, Task> tasks;

   public bool AllTasksDone {get;}
   public bool GetNumberOfRunnigTasksForUser(int userId){}

   public void AddTask(int userId, Task task){}
}

これを入れApplicationたり入れたりできSessionます (ユーザー セッションごとに 1 つのインスタンス)。また、投票リクエストに回答するために使用します。

タスクは簡単に作成できますTask.StartNew(MethodName)Task.StartNew(()=>{your code})

言及するだけです-これを行う別の方法があります-WebSockets。しかし、武器が重すぎる。あなたはおそらくそれを望んでいません。

于 2013-02-10T22:37:57.320 に答える
3

AJAX または SignalR の 2 つの可能性が考えられます。1 つ目は単純なアプローチです。タスクを開始し、定期的に AJAX 呼び出しを使用して、このタスクが終了したかどうかを確認します。欠点は、サーバーに大量のリクエストを送信することです。

2 番目のアプローチでは、最新のブラウザーで WebSocket とクライアントへのプッシュ通知を使用できる SignalR を使用します。AJAX ポーリング手法とは対照的に、SignalR では、サーバー上でタスクが進行または終了したことをクライアントに通知できるのはサーバーです。このようなシナリオ向けに、より最適化されています。個人的には、このタスクには SignalR を使用することをお勧めします。

于 2013-02-10T22:36:08.053 に答える