private static IEnumerator waitForCompletion(IOperationQueue queue) { while (queue.Count > 0) { yield return(null); } }
internal OperationFetcher(IOperationQueue copyOperationQueue, IOperationQueue replicationOperationQueue, bool drainQueuesInParallel) { this.copyOperationQueue = copyOperationQueue; this.replicationOperationQueue = replicationOperationQueue; this.drainQueuesInParallel = drainQueuesInParallel; this.role = ReplicaRole.None; }
public OperationFetcher(IStateReplicator stateReplicator, OperationProcessorInfo copyOperationProcessor, OperationProcessorInfo replicationOperationProcessor, bool drainQueuesInParallel) { Requires.Argument("partition", stateReplicator).NotNull(); Requires.Argument("copyOperationProcessor", copyOperationProcessor).NotNull(); Requires.Argument("replicationOperationProcessor", replicationOperationProcessor).NotNull(); if (copyOperationProcessor.Callback == null) { throw new ArgumentException("copyOperationProcessor.Callback cannot be null"); } if (replicationOperationProcessor.Callback == null) { throw new ArgumentException("replicationOperationProcessor.Callback cannot be null"); } this.copyOperationQueue = new OperationQueue(() => stateReplicator.GetCopyStream(), copyOperationProcessor) { Name = "CopyQueue" }; this.replicationOperationQueue = new OperationQueue(() => stateReplicator.GetReplicationStream(), replicationOperationProcessor) { Name = "ReplicationQueue" }; this.drainQueuesInParallel = drainQueuesInParallel; this.role = ReplicaRole.None; }
/// <summary> /// 构造器。 /// </summary> /// <param name="queue">操作队列</param> /// <param name="operations">操作集合</param> public QueueOperation(IOperationQueue queue, IEnumerable <IOperation> operations) { if (queue == null) { throw new ArgumentNullException("queue"); } if (operations == null) { throw new ArgumentNullException("operations"); } mQueue = queue; mOperations = operations; }
/// <summary> /// 等待队列里的所有操作结束。 /// <para> /// 用例: /// </para> /// <code> /// yield return myQueue.WaitForCompletion(); /// </code> /// </summary> public static YieldInstruction WaitForCompletion(this IOperationQueue queue) { return(BlazeEngine.Instance.StartCoroutine(waitForCompletion(queue))); }
private static Task DrainQueueAsyncHelper(IOperationQueue queue) { return(queue.DrainAsync().ContinueWith(t => OperationFetcher.LogQueueDrainCompletion(t, queue.Name), TaskContinuationOptions.ExecuteSynchronously)); }