0

非同期コントローラーでいくつかのテストを行っていますが、次のコードがあります。

public class AsyncSampleController : AsyncController
{

     public void IndexAsync()
      {
           Tasks tasks = new Tasks();
           //Indicates that we already started an asynchronous operation
           AsyncManager.OutstandingOperations.Increment();
           //Task.Factory start new to use another thread to use our operation.
           Task.Factory.StartNew(() =>
           {
                Stopwatch s1 = Stopwatch.StartNew();        
                tasks.BigOperation();
                s1.Stop();
                long data=s1.ElapsedMilliseconds;
                AsyncManager.Parameters.Add("data",data);
            });
            AsyncManager.OutstandingOperations.Decrement();

       }
       public ActionResult IndexCompleted(long data)
       { 
           ViewBag.ElapsedTime = data.ToString();
           return View();
       }
}

問題は、メソッド BigOperation が多かれ少なかれ 1 秒を費やしていることですが、IndexCompleted アクションのデータ パラメーターに保存された経過値を取得していません。

4

1 に答える 1

2

私はこれをテストしませんでしたが、Decrement呼び出しを匿名タスク内に配置する必要があります。私の推測ではDecrement、タスクが完了する前に呼び出されます。

于 2012-08-07T12:12:17.730 に答える