3

ダウンロードのためにファイルをクライアントにストリーミングしています。ただし、ファイル サイズが非常に大きくなる可能性があるため (最大数 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 からコントローラーを継承しています。

4

1 に答える 1