0

考虑以下场景:

auto h = CreateFile(...);
ReadFileEx(h, ...); // Asynchronous read for a large block of data. say, 1GB.
CloseHandle(h); 
// If the read has not yet finished here, what will happen? Big Bang???
4

1 回答 1

3

只要 Asyncronous 句柄在调用时有效,异步操作将保持有效,直到完成。这是因为异步文件 IO 调用包含对内核中文件对象的隐式引用计数。

当异步事件完成时,如果用户模式下没有更多句柄指向该文件,则该文件将在内核内部关闭。

请注意,这确实有明显的副作用。特别是,如果您打开文件以进行独占读/写,发出异步操作然后关闭句柄,则在异步操作完成之前,该文件将无法打开以进行读/写。

于 2013-02-08T06:24:47.427 回答