Exemplo n.º 1
0
 /// <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="parameter">Delegate parameter object.</param>
 /// <param name="timeout">Operation timeout.</param>
 /// <returns>
 /// ChannelStateOperationResult with ChannelState and OperationStatus.Completed, OperationStatus.QueueIsEmpty, OperationStatus.Timeout, OperationStatus.Cancelled,
 /// OperationStatus.DelegateFailed, OperationStatus.RequestedLengthIsGreaterThanLogicalAddressSpace, OperationStatus.RequestedLengthIsGreaterThanVirtualAddressSpace,
 /// or any OperationStatus returned by readingDelegate.
 /// </returns>
 public IAsyncOperation <ChannelStateOperationResult> ReadAsync(AsynchronousReadingDelegateWithParameterAndResult readingDelegate, object parameter, TimeSpan timeout)
 {
     return(AsyncInfo.Run(async cancellationToken =>
     {
         return new ChannelStateOperationResult(await _internal.ReadAsync(DelegateHelper.Wrap(readingDelegate), parameter, cancellationToken, timeout));
     }));
 }
Exemplo n.º 2
0
        public static Func <MemoryMappedViewStream, object, CancellationToken, Task <Internal.OperationStatus> > Wrap(AsynchronousReadingDelegateWithParameterAndResult externalDelegate)
        {
            return(async(MemoryMappedViewStream stream, object parameter, CancellationToken cancellationToken) =>
            {
                if (externalDelegate == null)
                {
                    return Internal.OperationStatus.Completed;
                }

                var result = await externalDelegate.Invoke(stream.AsRandomAccessStream(), parameter).AsTask(cancellationToken);

                return (Internal.OperationStatus)result;
            });
        }