わかった、
ここに MVC 4 アプリケーションがあり、その中で非同期 ActionResult を作成しようとしています。
目的 : ユーザーが Web ページにダウンロード PDF アイコンを持っていて、ダウンロードに時間がかかる。そのため、サーバーが PDF の生成でビジー状態である間、ユーザーは Web ページでいくつかのアクションを実行できます。
(「PDFのダウンロード」リンクをクリックすると、サーバーにajaxリクエストが送信され、サーバーはデータを取得してPDFをプッシュバックしています)
何が起こっているのかというと、ajax を呼び出して PDF をダウンロードしている間、プロセスが開始されますが、ブラウザーに戻らない限り、すべての要求がブロックされます。それは単純なブロック リクエストです。
これまでに試したこと。
1) AsyncController をコントローラーの基本クラスとして使用しました。
2) ActionResult を非同期タスク DownloadPDF() にしました。ここでは、PDF を生成するコード/ロジック全体をラッパーにラップしました。このラッパーは、最終的には DownloadPDF() 内で待機できるものになります。
このようなもの。
public async Task<ActionResult> DownloadPDF()
{
string filepath = await CreatePDF();
//create a file stream and return it as ActionResult
}
private async Task<string> CreatePDF()
{
// creates the PDF and returns the path as a string
return filePath;
}
はい、オペレーションはセッションベースです。
どこかで何かが欠けていますか?