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

时间:2015-07-30 20:48:31

标签: c# asynchronous async-await

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

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

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

1 个答案:

答案 0 :(得分:13)

几乎总是I / O.

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

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

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

所以你有:

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

await Task.Delay(1000);

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

Thread.Sleep(1000);

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

await Task.Run(() => CalculateSquareRoot(5));

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

CalculateSquareRoot(5);