private static IEnumerator waitForCompletion(IOperationQueue queue)
 {
     while (queue.Count > 0)
     {
         yield return(null);
     }
 }
Ejemplo n.º 2
0
 internal OperationFetcher(IOperationQueue copyOperationQueue, IOperationQueue replicationOperationQueue, bool drainQueuesInParallel)
 {
     this.copyOperationQueue        = copyOperationQueue;
     this.replicationOperationQueue = replicationOperationQueue;
     this.drainQueuesInParallel     = drainQueuesInParallel;
     this.role = ReplicaRole.None;
 }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
 /// <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)));
 }
Ejemplo n.º 6
0
 private static Task DrainQueueAsyncHelper(IOperationQueue queue)
 {
     return(queue.DrainAsync().ContinueWith(t => OperationFetcher.LogQueueDrainCompletion(t, queue.Name), TaskContinuationOptions.ExecuteSynchronously));
 }