В документах MSDN не очень ясно, какие ошибки могут быть возвращены. Я полагаю (поскольку CancelIo
в любом случае асинхронный), это означает, что вы использовали плохой дескриптор или что-то подобное. Под асинхронным я подразумеваю, что только из-за того, что CancelIo
возвращает OK, вы не можете немедленно освободить буфер для любого ожидающего ввода-вывода.
В указано , что ожидающие операции ввода / вывода будут возвращены с ERROR_OPERATION_ABORTED
. Я думаю, что вы уже отслеживаете состояние ожидающего ввода-вывода, так что вы можете безопасно освободить буфер, если и только если все ожидающие ввода-вывода вернут эту ошибку. Если ожидающий ввод-вывод останется зависшим после CancelIo
, освобождение буфера может вызвать каскад нежелательных побочных эффектов.