public void Start(IntPtr ioCompletionPort, IOCompletionCallback _callback) { while (true) { Thread.Yield(); bool succeeded = Native32.GetQueuedCompletionStatus(ioCompletionPort, out uint num_bytes, out IntPtr completionKey, out NativeOverlapped * nativeOverlapped, uint.MaxValue); if (nativeOverlapped != null) { int errorCode = succeeded ? 0 : Marshal.GetLastWin32Error(); _callback((uint)errorCode, num_bytes, nativeOverlapped); } else { break; } } }
/// <inheritdoc/> public override bool TryComplete() { if (!useIoCompletionPort) { return(true); } bool succeeded = Native32.GetQueuedCompletionStatus(ioCompletionPort, out uint num_bytes, out IntPtr completionKey, out NativeOverlapped * nativeOverlapped, 0); if (nativeOverlapped != null) { int errorCode = succeeded ? 0 : Marshal.GetLastWin32Error(); _callback((uint)errorCode, num_bytes, nativeOverlapped); return(true); } else { return(false); } }