我寫下面的代碼。我將這種方法稱爲使用三個獨立線程寫入三個不同的硬盤。其中一個CancelIo調用失敗(返回false)。爲什麼CancelIo函數失敗?
我假設磁盤是好的(硬件很好)。
這怎麼可能?如果沒有優秀的IO
(更改磁盤我看到它在另一個磁盤上再次發生後)。
public void foo(byte[] bufferToWrite)
{
unsafe
{
NativeOverlapped overlapped = new NativeOverlapped()
{
EventHandle = eventHandle,
OffsetLow = (int)(s & 0xffffffff),
OffsetHigh = (int)(s >> 32 & 0xffffffff)
};
GCHandle gch = GCHandle.Alloc(bufferToWrite, GCHandleType.Pinned);
IntPtr ptr = new IntPtr((void*)gch.AddrOfPinnedObject());
WriteFile(handle, ptr, length, ref bytesWritten, &overlapped);
dwResult = WaitForSingleObject(EventHandle, 30000);
if(dwResult== TIME_OUT)
{
Debug.Assert(CancelIo (handle));
}
}
}
這看起來像一個錯誤:'if(bResult == ERROR_SUCCESS == || bResult == ERROR_IO_PENDING)'?? – hmjd
@ChrisF,只是在想我自己... – hmjd
夥計......它只是拼寫錯誤..讓我們保持焦點:) – Yanshof