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)); }
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); } }