如何使用Task.WhenAll()加载测试此方法?

时间:2018-06-28 00:38:51

标签: c# .net asynchronous async-await task

我想通过Task.WhenAll()加载以下方法:

static async Task<User> GetUserAsync()
{
    return (await new ApiTester().GetUserAsync());
}

基本上,我想同时调用此方法100次,并在处理结束时,确定总耗时和每次方法调用的时间。如果您知道该怎么做,可以提供代码吗?对于Task.WaitAll专家来说,这可能很容易,但是对于一种非常特殊的情况,我只使用了一次此方法。

1 个答案:

答案 0 :(得分:2)

您应该使用BenchmarkDotNet。但是,这是达成您想要的目标的粗略方法

您的方法

private static async Task<User> GetUserAsync() 
{    
   return await new ApiTester().GetUserAsync(); 
}

异步整理任务

private static async Task<double> GetUserMsAsync()
{
   var sw = new Stopwatch();
   sw.Start();
   var user = await GetUserAsync();
   sw.Stop();

   return sw.Elapsed.TotalMilliseconds;
}

测试器

public static async Task Tester()
{
   var sw = new Stopwatch();

   try
   {
      var tasks = Enumerable.Range(0, 100)
                            .Select(x => GetUserMsAsync())
                            .ToArray();

      sw.Start();

      var results = await Task.WhenAll(tasks);

      foreach (var result in results)
      {
         Console.WriteLine(result);
      }
   }
   finally
   {
      sw.Stop();
      Console.WriteLine($"sw : {sw.Elapsed:c}");
   }
}

用法

private static void Main(string[] args)
{
   Tester().Wait();  
   Console.ReadKey();
}

免责声明,如果您不了解所要测试的内容和所要测试的环境,这并不能证明什么。但是,请假以为然。

祝你好运