/// <summary> /// Drains this queue. /// </summary> /// <param name="errorHandler">The error handler.</param> public static void Drain(Action <Exception> errorHandler) { while (TransactionQueue.TryDequeue(out var transaction)) { CurrentlyExecutingTransaction = transaction; if (CurrentlyExecutingTransaction == null) { continue; } try { CurrentlyExecutingTransaction.Execute(); } catch (Exception ex) { errorHandler(new Exception(string.Format("Exception in Global.DrainTransactionQueue(): {0}", transaction.GetType().Name), ex)); } } }
/// <summary> /// Drains this queue. /// </summary> /// <param name="errorHandler">The error handler.</param> public static void Drain(Action <Exception> errorHandler) { while (TransactionQueue.TryDequeue(out var transaction)) { CurrentlyExecutingTransaction = transaction; CurrentlyExecutingTransactionProgress = null; if (CurrentlyExecutingTransaction == null) { continue; } try { if (CurrentlyExecutingTransaction is ITransactionWithProgress) { var transactionWithProgress = CurrentlyExecutingTransaction as ITransactionWithProgress; if (transactionWithProgress.Progress != null) { transactionWithProgress.Progress.ProgressChanged += (reporter, progress) => { CurrentlyExecutingTransactionProgress = progress; }; } } CurrentlyExecutingTransaction.Execute(); } catch (Exception ex) { errorHandler(new Exception(string.Format("Exception in Global.DrainTransactionQueue(): {0}", transaction.GetType().Name), ex)); } finally { CurrentlyExecutingTransactionProgress = 100; } } }
/// <summary> /// Determines whether a transaction of a certain type is being run. /// </summary> /// <typeparam name="T"></typeparam> /// <returns> /// <c>true</c> if [has transaction of type]; otherwise, <c>false</c>. /// </returns> public static bool IsExecuting <T>() where T : ITransaction { return(CurrentlyExecutingTransaction?.GetType() == typeof(T)); }