bor*_*ris 0 .net c# asynchronous async-await
我有两个API,它们调用相同的服务。
该版本在最昂贵的任务花费的时间内执行。
public async Task<double> Do()
{
var sw = System.Diagnostics.Stopwatch.StartNew();
var t1 = _service.Do1();
var t2 = _service.Do2();
await t1;
await t2;
return sw.Elapsed.TotalMilliseconds;
}
Run Code Online (Sandbox Code Playgroud)
这是每个任务延迟的总和。
public async Task<double> Do()
{
var sw = System.Diagnostics.Stopwatch.StartNew();
await _service.Do1();
await _service.Do2();
return sw.Elapsed.TotalMilliseconds;
}
internal async Task Do1() => await Task.Delay(5000);
internal async Task Do2() => await Task.Delay(2000);
Run Code Online (Sandbox Code Playgroud)
为什么会这样,实际上是什么情况?
任务返回“ hot”或已开始。该await关键字相当的字面意思是在这里举行,等待任务完成。这样,当您分别等待每个操作时,它将调用Do1,等待操作完成,然后调用Do2并等待操作完成。
但是,当你只是将它们存储在变量,它调用Do1,然后调用Do2,同时Do1仍在运行。稍后,当您使用await这两个变量时,代码将等待每个变量实际完成一个,但是它们已经在运行。
总而言之,串行和并行运行是有区别的。异步操作可以并行运行,但它们本质上不是并行的:这是两个不同的概念。