2017-09-05 9 views
0

私のコントローラの所定の操作のタイムアウトを減らそうとしましたが(私はそれがインデックスだと言いましょう)、私はAsyncTimeout(5000)と注釈を付けました。
このメソッドの内部では、最初の行はawait Task.Delay(10000)です。
は私が...そこにはdebug="true"ませんが、たとえそうであっても、要求は、使用されることになっていますされていませんどのように私の意見では、そう... 11-13秒のために実行されることを保証し、紺碧にそのコードを公開しAsyncTimeoutアクションフィルタのポイントは何ですか?

では、この属性はどこで使うべきですか?

詳細:
.NET 4.7(コンパイルおよび実行時)とlatestsのasp.netのMVC(5.2.3)あなたはCancellationTokenを受け入れるTask.Delayのオーバーロードを使用するようになっているはずです

答えて

2

を使用します。その場合、AsyncTimeoutはキャンセルをトリガーします。投稿されたコードはCancellationTokenを使用していないので、私はそれがなければ何も起こらないとは思っていません。

UPDATE-あなたの質問にクイックデモビルド。これは、15秒のTask.Delay呼び出しを待つのではなく、約5秒でTaskCanceledExceptionをスローする必要があります。

[AsyncTimeout(5000)] 
public async Task<ActionResult> Index(CancellationToken cancellationToken) 
{ 
    Stopwatch cancellationTimer = Stopwatch.StartNew(); 
    try 
    {     
     await Task.Delay(15000, cancellationToken); 
     cancellationTimer.Stop(); 
     return View(); 
    } 
    catch (Exception e) 
    { 
     cancellationTimer.Stop(); 
     Debug.WriteLine($"Elapsed Time {cancellationTimer.ElapsedMilliseconds}"); 
     throw (e); 
    }    
} 
+0

コードが現在長い計算(巨大なループなど)になっているとどうなりますか?使用サンプルplsを投稿できますか? (私もオンラインで探しています...) – Leonardo

+0

簡単な例を示すために私の答えを更新しました。 – mcbowes

関連する問題