ダウンロードのためにファイルをクライアントにストリーミングしています。ただし、ファイル サイズが非常に大きくなる可能性があるため (最大数 GB)、ダウンロードと同じコントローラーに移動する Web ページ上の他のボタンをクリックするユーザーをブロックしたくありません。インターネットで読んだところ、「Async」および「Completed」サフィックスを使用して非同期にできることがわかりました。これが私のコードです。
public void DownloadAsync(string filename, string Id, string docId)
{
AsyncManager.OutstandingOperations.Increment();
// code to get the file from server and send it to client.
AsyncManager.OutstandingOperations.Decrement();
}
public ActionResult DownloadCompleted()
{
return RedirectToAction("Index");
}
public string OtherAction()
{
// code for this action.
}
Webページでダウンロードをクリックし、「OtherAction」ボタンもクリックすると。リクエストは引き続き同期的に処理されます。「OtherAction」はユーザーに文字列を返すだけで、時間のかかるものではないため、非同期にしませんでした。
.Increment() 操作と .Decrement() 操作の間にコードを含めて、ファイルをダウンロードするコードを「何か」内にラップして、新しいスレッドなどを開始する必要がありますか? ここで他に何が欠けているのかわかりません。AsyncController からコントローラーを継承しています。