public override object WaitForPendingOperationsToComplete(object invocationResult) { try { _currentContext.WaitForPendingOperationsToComplete(); return(invocationResult); } catch (Exception e) { throw new AsyncInvocationException(e); } }
/// <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); } }