シナリオは次のとおりです。ユーザーのログイン時に、メール通知のためにアイドル状態の IMAP をリッスンするタスクを開始し、シグナル (プッシュ通知のようなもの) を介してクライアントとライブ接続します。問題は、このタスクをキャンセルする方法です。つまり、ユーザーはプッシュ通知をキャンセルするか、ログアウトします。
編集:私の理解によると、たとえば、5人のユーザーがサイトにログオンした場合、5つのタスクが実行されていますか? 個々のタスクをキャンセルするにはどうすればよいですか。
シナリオは次のとおりです。ユーザーのログイン時に、メール通知のためにアイドル状態の IMAP をリッスンするタスクを開始し、シグナル (プッシュ通知のようなもの) を介してクライアントとライブ接続します。問題は、このタスクをキャンセルする方法です。つまり、ユーザーはプッシュ通知をキャンセルするか、ログアウトします。
編集:私の理解によると、たとえば、5人のユーザーがサイトにログオンした場合、5つのタスクが実行されていますか? 個々のタスクをキャンセルするにはどうすればよいですか。
タスクを作成するときはいつでも、キャンセルトークンを作成して渡す必要があります。各ユーザーはタスクに関連付けられているため、ユーザーのセッションにタスクとキャンセルトークンを保存できます。
これで、ユーザーのセッションに保存されているキャンセルトークンを使用して、ユーザーがログアウトしたとき、またはキャンセルボタンを押したときにタスクを簡単にキャンセルできます。
タスクのキャンセルについては、この投稿を参照してください。
キャンセルをサポートするには、非同期ワーカーを変更する必要があります
http://www.csharp-examples.net/cancel-asynchronous-method/
少し複雑でないバックグラウンド ワーカーを使用することもできます http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.cancelasync.aspx
すでにジョブを開始している外部ソース (DB、アプリ) にキャンセルを送信するときに発生した問題。キャンセルがサポートされていない場合は、終了するまで待たなければならない場合があります。
編集: MVC でこれを行ったことはありませんが、MVC4 で CancellationToken パラメータを取る asyncn プロセスの「キャンセルトークンの使用」に関する良い記事を見つけました。 http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4 お役に立てば幸いです。
プロセスは、ユーザーからのアクティビティがなくても、自分自身を殺すことができます。他のスレッドで変数を交換する最も簡単な方法はファイルです。クライアント ブラウザーがまだ開いているとします。javascript タイマーが Ajax 要求を呼び出し、サーバー上でタイム スタンプをファイルに書き込みます。また、タスクは定期的にファイルを読み取り、タイムスタンプが古すぎるとプロセスが強制終了します。任意に設定できるアクティビティ タイムアウトの値。