【发布时间】:2015-04-22 07:30:30
【问题描述】:
我试图理解为什么使用“异步”方法比使用简单的旧同步方法更好。
有一个小问题,我不明白。
关于同步方式:
- 我有一些线程调用方法
FileStream.Read(...)。 - 因为调用此方法是同步的,所以调用线程将等待,直到 IRP(I/O 请求包)发出此 Io 请求完成的信号。 直到 IRP 返回 ==> 该线程将暂停(睡眠)。
关于A-同步方式:
- 我有一些调用方法
FileStream.ReadAsync(...)的线程(任务..让我们称这个线程'TheadAsync01')。 - 因为调用这个方法是A-Synchronous,所以调用线程不会等到IRP(I/O请求包)发出这个IO请求完成的信号;并且这个调用线程将继续他的下一个动作。
现在,当 IRP 发出这个 IO 请求完成的信号时,发生了什么?
(线程 TheadAsync01 现在正在做其他事情,无法继续使用 'FileStream.ReadAsync' 返回的内容。)
其他线程会以ReadAsync的返回值继续下一个动作吗?
我在这里不明白什么?
【问题讨论】:
-
在 A 的情况下,它不会继续下一条指令 - 它或多或少会注册一个回调,其结果将继续下一条指令并释放线程.当 IO 完成时,它将在新线程上调用回调并从那里继续
标签: c# .net async-await