private async Task <TaskActivityWorkItem> LockNextTaskActivityWorkItem(
            TimeSpan receiveTimeout,
            INameVersionInfo[] activities,
            bool allActivities,
            CancellationToken cancellationToken)
        {
            var request = new LockNextTaskActivityWorkItemRequest
            {
                ReceiveTimeout = Duration.FromTimeSpan(receiveTimeout),
                Activities     =
                {
                    activities
                    .Select(nv => new NameVersion {
                        Name = nv.Name, Version = nv.Version
                    })
                },
                AllActivities = allActivities
            };

            var response = await _client.LockNextTaskActivityWorkItemAsync(request, cancellationToken : cancellationToken);

            if (response.WorkItem == null)
            {
                return(null);
            }

            return(ToDurableTaskWorkItem(response.WorkItem));
        }
예제 #2
0
        public override async Task <LockNextTaskActivityWorkItemResponse> LockNextTaskActivityWorkItem(LockNextTaskActivityWorkItemRequest request, ServerCallContext context)
        {
            try
            {
                var activities = request.Activities.Select(x => new NameVersion(x.Name, x.Version)).ToArray();

                var workItem = await(request.AllActivities
                    ? _orchestrationService
                                     .LockNextTaskActivityWorkItem(request.ReceiveTimeout.ToTimeSpan(), context.CancellationToken)
                    : (_extendedOrchestrationService ?? throw DistributedWorkersNotSupported())
                                     .LockNextTaskActivityWorkItem(request.ReceiveTimeout.ToTimeSpan(), activities, context.CancellationToken));

                var response = new LockNextTaskActivityWorkItemResponse
                {
                    WorkItem = workItem == null ? null : ToGrpcWorkItem(workItem)
                };

                return(response);
            }
            catch (OperationCanceledException) when(context.CancellationToken.IsCancellationRequested)
            {
                // Avoid exceptions when clients cancel request
                return(null);
            }
        }