/// <summary> /// Adds new message to the queue. This method is thread-safe. /// </summary> /// <param name="writingDelegate">Custom delegate to write using message's stream.</param> /// <param name="length"> /// Specifies how much memory will be allocated for new message. /// Delegate will receive a stream with capacity limited by this parameter, but it is not forced to use all allocated space. /// </param> /// <param name="timeout">Operation timeout.</param> /// <returns> /// ChannelStateOperationResult with ChannelState and OperationStatus.Completed, OperationStatus.Timeout, OperationStatus.Cancelled, /// OperationStatus.DelegateFailed, OperationStatus.RequestedLengthIsGreaterThanLogicalAddressSpace, /// OperationStatus.RequestedLengthIsGreaterThanVirtualAddressSpace or OperationStatus.OutOfSpace /// </returns> public IAsyncOperation <ChannelStateOperationResult> WriteAsync(AsynchronousWritingDelegate writingDelegate, long length, TimeSpan timeout) { return(AsyncInfo.Run(async cancellationToken => { return new ChannelStateOperationResult(await _internal.WriteAsync(DelegateHelper.Wrap(writingDelegate), null, length, cancellationToken, timeout)); })); }
public static Func <MemoryMappedViewStream, object, CancellationToken, Task <Internal.OperationStatus> > Wrap(AsynchronousWritingDelegate externalDelegate) { return(async(MemoryMappedViewStream stream, object parameter, CancellationToken cancellationToken) => { if (externalDelegate != null) { await externalDelegate.Invoke(stream.AsRandomAccessStream()).AsTask(cancellationToken); } return Internal.OperationStatus.Completed; }); }