/// <summary>
        /// Throws if the specified operation is faulted/canceled.
        /// </summary>
        public static void ThrowIfNonSuccess(this IAsyncOperation op)
        {
            var status = op.Status;

            if (status == AsyncOperationStatus.Faulted)
            {
                if (!AsyncResult.TryThrowException(op.Exception))
                {
                    // Should never get here. Exception should never be null in faulted state.
                    throw new Exception();
                }
            }
            else if (status == AsyncOperationStatus.Canceled)
            {
                if (!AsyncResult.TryThrowException(op.Exception))
                {
                    throw new OperationCanceledException();
                }
            }
        }