什么是"自然异步"或"纯异步"?

Chi*_*hin 9 c# asynchronous async-await

在很多关于C#的异步/等待的讨论中,我看到有人提到"自然异步"或"纯异步"这个术语.这些术语到底意味着什么?

什么是"自然异步"操作的例子,为什么这样称呼?

什么是"非自然异步"操作的例子,为什么?

i3a*_*non 13

它几乎总是I/O.

自然异步操作是不需要CPU的操作,例如通过网络发送数据或从硬盘驱动器读取数据.它们不需要任何计算,因此CPU可以在运行时执行其他任务.

还有一些逻辑操作不需要线程,例如等待超时到期,或等待同步构造(例如AsyncLock)

异步但非自然异步的操作是在后台线程上执行的CPU操作.这些对于响应性(例如对于UI应用程序)非常有用,但由于它们仍然需要相同数量的资源,因此无法提高性能或可伸缩性.

所以你有了:

异步运行的自然异步操作:

await Task.Delay(1000);
Run Code Online (Sandbox Code Playgroud)

自然异步操作同步运行:

Thread.Sleep(1000);
Run Code Online (Sandbox Code Playgroud)

异步运行的自然同步操作:

await Task.Run(() => CalculateSquareRoot(5));
Run Code Online (Sandbox Code Playgroud)

同步运行的自然同步操作:

CalculateSquareRoot(5);
Run Code Online (Sandbox Code Playgroud)