protected internal override async Task <Complex> UnpackFromAsyncCore(Unpacker unpacker, CancellationToken cancellationToken) { var real = await unpacker.ReadDoubleAsync(cancellationToken).ConfigureAwait(false); if (!real.Success) { SerializationExceptions.ThrowUnexpectedEndOfStream(unpacker); } var imaginary = await unpacker.ReadDoubleAsync(cancellationToken).ConfigureAwait(false); if (!imaginary.Success) { SerializationExceptions.ThrowUnexpectedEndOfStream(unpacker); } return(new Complex(real.Value, imaginary.Value)); }
public static async Task< Double> UnpackDoubleValueAsync( Unpacker unpacker, Type objectType, String memberName, CancellationToken cancellationToken ) { if ( unpacker == null ) { SerializationExceptions.ThrowArgumentNullException( "unpacker" ); } if ( objectType == null ) { SerializationExceptions.ThrowArgumentNullException( "objectType" ); } if ( memberName == null ) { SerializationExceptions.ThrowArgumentNullException( "memberName" ); } #if ASSERT Contract.Assert( unpacker != null ); Contract.Assert( objectType != null ); Contract.Assert( memberName != null ); #endif // ASSERT // ReSharper disable once RedundantAssignment var ctx = default( UnpackerTraceContext ); InitializeUnpackerTrace( unpacker, ref ctx ); try { AsyncReadResult<Double> result = await unpacker.ReadDoubleAsync( cancellationToken ).ConfigureAwait( false ); if ( !result.Success ) { SerializationExceptions.ThrowFailedToDeserializeMember( objectType, memberName, null ); } Trace( ctx, "ReadDirect", unpacker, memberName ); return result.Value; } catch ( MessageTypeException ex ) { SerializationExceptions.ThrowFailedToDeserializeMember( objectType, memberName, ex ); return default( Double ); // never reaches. } }