コード例 #1
0
        protected static async Task CompleteBatchOperationsAsync(
            IReadOnlyList <ResolverContext> batch,
            BatchOperationHandler batchOperationHandler,
            CancellationToken cancellationToken)
        {
            Debug.Assert(batch != null);
            Debug.Assert(batchOperationHandler != null);

            Task[] tasks = ArrayPool <Task> .Shared.Rent(batch.Count);

            for (int i = 0; i < batch.Count; i++)
            {
                tasks[i] = batch[i].Task;
            }

            var taskMemory = new Memory <Task>(tasks);

            taskMemory = taskMemory.Slice(0, batch.Count);

            try
            {
                await batchOperationHandler.CompleteAsync(
                    taskMemory, cancellationToken)
                .ConfigureAwait(false);
            }
            finally
            {
                ArrayPool <Task> .Shared.Return(tasks);
            }
        }
コード例 #2
0
 protected static Task CompleteBatchOperationsAsync(
     IReadOnlyCollection <Task> tasks,
     BatchOperationHandler batchOperationHandler,
     CancellationToken cancellationToken)
 {
     return((batchOperationHandler == null)
         ? Task.CompletedTask
         : batchOperationHandler.CompleteAsync(
                tasks, cancellationToken));
 }