在关于C#的异步/等待的很多讨论中,我看到人们提到“自然异步”或“纯异步”这个术语.这些术语是什么意思?
什么是“自然异步”操作的一些例子,为什么它这样叫?
什么是“非自然异步”操作的一些例子,为什么?
解决方法
几乎总是I / O.
自然异步操作是不需要cpu的操作,例如通过网络发送数据或从硬盘驱动器读取数据.它们不需要任何计算,因此cpu可以在运行时执行其他任务.
还有不需要线程的逻辑操作,例如等待超时到期,或等待同步结构(例如AsyncLock)
异步但不是自然异步的操作是在后台线程上执行的cpu操作.这些对于响应能力非常有用(例如对于UI应用程序),但由于仍然需要相同数量的资源,因此不会提高性能或可扩展性.
所以你有:
自然异步操作异步运行:
await Task.Delay(1000);
自然异步操作同步运行:
Thread.Sleep(1000);
自然同步运行异步运行:
await Task.Run(() => CalculateSquareRoot(5));
自然同步运行同步运行:
CalculateSquareRoot(5);