public override object WaitForPendingOperationsToComplete(object invocationResult)
 {
     try
     {
         _currentContext.WaitForPendingOperationsToComplete();
         return(invocationResult);
     }
     catch (Exception e)
     {
         throw new AsyncInvocationException(e);
     }
 }
Пример #2
0
        /// <summary>
        /// 同步等待action方法执行完成
        /// 创建新的同步上下文关联执行action
        /// 执行完成后切换为原始同步上下文
        /// </summary>
        /// <param name="action">要等待的同步或异步方法</param>
        /// <exception cref="ArgumentNullException"></exception>
        /// <returns>当action有异步操作返回true</returns>
        public bool WaitAction(Action action)
        {
            if (action == null)
            {
                throw new ArgumentNullException();
            }

            var previousContext = SynchronizationContext.Current;

            try
            {
                var currentContext = new AsyncSynchronizationContext(this);
                SynchronizationContext.SetSynchronizationContext(currentContext);
                action.Invoke();
                return(currentContext.WaitForPendingOperationsToComplete() > 0L);
            }
            finally
            {
                SynchronizationContext.SetSynchronizationContext(previousContext);
            }
        }