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));
        }
예제 #2
0
		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.
			}
		}