public async Task <IBleResult <TOut> > ReadAsync(IParametrizedReaderBehavior <TIn, TOut> parametrizedReader, TIn parameter, CancellationToken cancellationToken)
        {
            IBleResult <TOut> result;

            try
            {
                if (_connector.IsConnected)
                {
                    result = await parametrizedReader.ReadAsync(parameter, cancellationToken).ConfigureAwait(false);
                }
                else
                {
                    var connectionResult = await _connector.ConnectAsync(cancellationToken);

                    if (connectionResult.IsOperationCompleted)
                    {
                        cancellationToken.ThrowIfCancellationRequested();
                        result = await parametrizedReader.ReadAsync(parameter, cancellationToken);
                    }
                    else
                    {
                        result = BleResult.Failure <TOut>(BleFailure.DeviceNotConnected, connectionResult);
                    }
                }
            }
            catch (OperationCanceledException)
            {
                result = BleResult.Failure <TOut>(BleFailure.OperationCancelled);
            }

            return(result);
        }
 public Task <IBleResult <TOut> > ReadAsync(IParametrizedReaderBehavior <TIn, TOut> parametrizedReader, TIn parameter, CancellationToken cancellationToken)
 {
     return(_executor.TimeoutBleOperationAsync(ct => parametrizedReader.ReadAsync(parameter, ct), _timeout, cancellationToken));
 }
Пример #3
0
 public DecoratedParametrizedReaderBehavior(IParametrizedReaderBehavior <TIn, TOut> parametrizedReader, IParametrizedReaderDecorator <TIn, TOut> decorator)
 {
     _parametrizedReader = parametrizedReader;
     _decorator          = decorator;
 }