ASP.NET サイトに Web メソッドがあり、実行時間が長く、多くの CPU 容量を消費する可能性があります。また、リクエストが返される前に、ユーザーがサイトから他のパラメータまたは複数のパラメータを使用して新しいリクエストを開始する可能性もあります。クライアント側で中止を行います:
if (xhrConfigurate != null) {
xhrConfigurate.abort();
}
もちろん、abort はサーバー上の計算を停止しません。これは問題ありません。サーバーは必要なことを行いますが、古い要求の結果は返しません。しかし、場合によっては、サーバーがすべてのリクエストをタイムリーに処理するのに問題があるようです。そのため、ユーザーが新しいリクエストを開始したときに、古いリクエストも強制終了したいと考えています。scriptmanager を使用していくつかの解決策を見つけましたが、その使用は避けたいと思います。
webmethod 自体は非同期スレッドであるため、このスレッドのインスタンスを取得して辞書に保存し、完了していないユーザーの古い要求を中止し、要求が完了したら削除することはできませんか?
<WebMethod> Public Shared Function myRequest(ByVal params As String) As String
'Get the dictionary with requests
'Test the dictionary on old unfinsihed request for the user, if there is one: abort
'Add this request to the dictionary
'Do work...
'If work finsihed: remove this request from dictionary
Return result
End Sub