私の MVC4 アプリでは、大きなファイルをアップロードして処理するためのコントローラーを追加する必要があります。ファイルがアップロードされた直後に、そのファイルの非同期処理を開始し、処理が完了するのを待たずにブラウザーに応答を返す必要があります。
明らかに、ファイルを手動で処理するための新しいスレッドを開始できますが、.net 4.5 で導入された async/await メカニズムを使用してこのシナリオを実装できるかどうか疑問に思っています
コンセプトをテストするために、次のようなことを試しました。
public async Task<ActionResult> Test()
{
TestAsync();
return View("Test");
}
public async void TestAsync()
{
await LongRunning();
}
private Task<int> LongRunning()
{
return Task<int>.Factory.StartNew(() => Pause());
}
private int Pause()
{
Thread.Sleep(10000);
return 3;
}
非同期メカニズムは一般的に機能しているようです。コードをデバッグするときに、「return View("Test");」を押します。行「return 3」の前の行。ただし、ブラウザは Pause メソッドが完了した後にのみ応答を受け取ります。
これは、通常の非同期コントローラー (Async および Completed メソッドを持つもの) のように動作するようです。私のシナリオのコントローラーで async/await を使用する方法はありますか?