/// <summary> /// Reads and removes a message from the queue. This method is thread-safe. /// </summary> /// <param name="readingDelegate">Custom delegate to read using message's stream.</param> /// <param name="timeout">Operation timeout.</param> /// <returns> /// ChannelStateOperationResult with ChannelState and OperationStatus.Completed, OperationStatus.QueueIsEmpty, OperationStatus.Timeout, OperationStatus.Cancelled, /// OperationStatus.RequestedLengthIsGreaterThanLogicalAddressSpace, or OperationStatus.RequestedLengthIsGreaterThanVirtualAddressSpace. /// </returns> public IAsyncOperation <ChannelStateOperationResult> ReadAsync(AsynchronousReadingDelegate readingDelegate, TimeSpan timeout) { return(AsyncInfo.Run(async cancellationToken => { return new ChannelStateOperationResult(await _internal.ReadAsync(DelegateHelper.Wrap(readingDelegate), null, cancellationToken, timeout)); })); }
public static Func <MemoryMappedViewStream, object, CancellationToken, Task <Internal.OperationStatus> > Wrap(AsynchronousReadingDelegate externalDelegate) { return(async(MemoryMappedViewStream stream, object parameter, CancellationToken cancellationToken) => { if (externalDelegate != null) { await externalDelegate.Invoke(stream.AsRandomAccessStream()).AsTask(cancellationToken); } return Internal.OperationStatus.Completed; }); }