я могу загрузить тестирование этого метода с помощью Task.WhenAll ()? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть следующий метод, который я хочу загрузить тест с помощью Task.WhenAll ():

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

По сути, я хочу вызвать этот метод 100 раз одновременно и в конце обработки определить общее прошедшее время и время на вызов метода. Можете ли вы предоставить код, если вы знаете, как это сделать? Это, вероятно, легко для эксперта Task.WaitAll, но я использовал этот метод только один раз для одного очень специфического сценария.

1 Ответ

0 голосов
/ 28 июня 2018

Вы должны использовать BenchmarkDotNet. Однако вот грубый способ достижения того, что вы хотите

Ваш метод

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

Асинхронное задание Timmer

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();
}

Отказ от ответственности , это мало что докажет, если вы не понимаете, что вы тестируете, и среды, в которой вы тестируете. Однако я полагаю, что вы это делаете.

Удачи

...