我想通过Task.WhenAll()加载以下方法:
static async Task<User> GetUserAsync()
{
return (await new ApiTester().GetUserAsync());
}
基本上,我想同时调用此方法100次,并在处理结束时,确定总耗时和每次方法调用的时间。如果您知道该怎么做,可以提供代码吗?对于Task.WaitAll专家来说,这可能很容易,但是对于一种非常特殊的情况,我只使用了一次此方法。
答案 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();
}
免责声明,如果您不了解所要测试的内容和所要测试的环境,这并不能证明什么。但是,请假以为然。
祝你好运