2017-11-15 5 views
0

私は以下のように新しいWebアプリケーションのテストコードを書くいる:私は非同期メソッドを呼び出すと、メインスレッドはすぐに応答を返さないのですか?

public ActionResult Index() 
    { 
     Logger.Write("start Index,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId); 
     MyMethodAsync(System.Web.HttpContext.Current.Request);//no await and has warning 
     Logger.Write("end Index,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId); 
     return View(); 
    } 

private async Task MyMethodAsync(HttpRequest request) 
    { 
     Logger.Write("start MyMethodAsync,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId); 
     await SomeMethodAsync(request); 
     Logger.Write("end MyMethodAsync,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId); 
    } 

そして、ここでは、ログです:

2017年11月15日19:55:31.904開始インデックス、スレッドID:35

2017年11月15日19:55:31.919開始MyMethodAsync、スレッドID:35

2017年11月15日19:55:31.919端インデックス、スレッドID:35

2017年11月15日19:55:53.324 end MyMethodAsync、threadId:46

クライアントブラウザーは約2017-11-15 19:55:32で応答を受け、私の理解に合致します。私の実際のプロダクション環境では、上記と同じログを書き込みますが、クライアントブラウザーは約22秒後に約2017-11-15 19:55:54に応答を受け取りました。メインスレッドが作業を完了したとしても、メインスレッドは新しいスレッドが作業を完了するまで応答を返しません。

私はこの問題をサーバー日でデバッグしています。私を手伝ってくれますか?

答えて

0

async-await HTTPプロトコルは変更されません。要求はサーバーに送られ、サーバーは応答を生成してクライアントに送信します。

ASP.NETリクエストがASP.NETによってどのように処理されるかを変えるだけです。

また、要求処理が高速になるわけではありません。まったく反対。

しかし、それはより多くのスレッドプールスレッドを使用し、負荷の高い状態でサーバーをより応答性にします。

+0

Paulo Morgadoありがとうございます。私はあなたが言ったことを知っています。しかし、なぜdifferenctソリューションの同じコードが異なる応答時間を持っていますか? –

関連する問題