Closed gaufung closed 4 months ago
在 C#
异步代码中,常常有人会有这样的一个疑问,是不是有一个线程在等待异步的完成,比如
private async void Button_Click(object sender, RoutedEventArgs e)
{
byte[] data = ...
await myDevice.WriteAsync(data, 0, data.Length);
}
在 WriteAsync
方法中,是不是有一个线程在调用这个方法。答案是否定的。没有任何一个线程调用这个方法,这个要从 CPU 的硬件底层来讲,当硬件开始一个 I/O
操作的时候,CPU 会继续处理其他事情,当 I/O
操作完成之后,会给 CPU
发出一个中断的信号,这时候内容的应用程序会将后续的操作作为一个 continuation
塞入某个线程的队列中。
https://blog.stephencleary.com/2013/11/there-is-no-thread.html?ref=codetraveler.io