我知道Async和线程是两个非常不同的东西,因为第一个用于开发异步行为,而另一个用于同步或并行功能。但我刚才注意到的一件事是,当目标是在长时间运行的任务中保持应用程序的响应和活动时,使用Async和Await时,使用这样的线程执行旧方式的CPU使用率相当低:
Thread Task1 = new Thread(()=>{
// Do Something
});
Thread Task2 = new Thread(()=>{
Task1.Start();
while(true){
if (!Task1.IsAlive){
// Do something
break;
}
Thread.Sleep(50);
}
});
我只想知道Async是否具有更高性能是否正常,因为我认为同样的Senario正在后台进行异步任务。对两者使用相同的延迟毫秒(50):
Thread.Sleep(50) -> thread
await Task.Delay(50) -> Async
在性能测试应用程序上,我观察到Async上执行相同操作的CPU使用率降低了5%。
答案 0 :(得分:0)
从“保持应用程序响应”我得出结论,你谈到了一些Windows程序。
在这种情况下,async / await将在与程序其余部分相同的UI线程中运行。 Windows调度程序将执行异步部分以及其余顺序。 (异步操作本身之后的延续代码将在UI线程上运行)
另一方面,backgorund工作者(线程)将并行并且可能在另一个核心(现在)上运行。
无论如何,CPU使用率告诉你没有关于最新情况。