private void OnNotify() { Span <Interop.Rio.RIORESULT> results = stackalloc Interop.Rio.RIORESULT[32]; do { lock (_completionQueue) { Interop.Rio.Notify(_completionQueue); } _waitHandle.WaitOne(); int dequeued; do { lock (_completionQueue) { dequeued = Interop.Rio.DequeueCompletions(_completionQueue, results); } for (int i = 0; i < dequeued; ++i) { ref Interop.Rio.RIORESULT result = ref results[i]; RegisteredOperationContext.Complete(result.Status, result.BytesTransferred, new IntPtr(result.RequestContext)); } }while (dequeued != 0); } while (!_disposing); }
private void OnNotify() { Span <Interop.Rio.RIORESULT> results = stackalloc Interop.Rio.RIORESULT[32]; int dequeued; do { lock (_completionQueue) { dequeued = Interop.Rio.DequeueCompletions(_completionQueue, results); } Console.WriteLine($"Dequeued {dequeued} notifications."); for (int i = 0; i < dequeued; ++i) { ref Interop.Rio.RIORESULT result = ref results[i]; RegisteredOperationEventArgs.Complete(result.Status, result.BytesTransferred, new IntPtr(result.RequestContext)); } }while (dequeued != 0); Notify(); }