public async Task HandleRequest([OrchestrationTrigger] IDurableOrchestrationContext orchestrationContext) { var input = orchestrationContext.GetInput <ApiRequestDto>(); var queueRequest = new QueueRequestDto { Name = input.Name, OrchestrationId = orchestrationContext.InstanceId }; await orchestrationContext.CallActivityAsync(nameof(HandleRequestEnqueue), queueRequest); var cancellationTokenSource = new CancellationTokenSource(); var requestTask = orchestrationContext.WaitForExternalEvent <ApiReplyDto>(Constants.RequestProcessedEventName); var timeoutTask = orchestrationContext.CreateTimer(orchestrationContext.CurrentUtcDateTime.AddMinutes(5), cancellationTokenSource.Token); await Task.WhenAny(requestTask, timeoutTask); // Reply received if (requestTask.IsCompletedSuccessfully) { cancellationTokenSource.Cancel(); orchestrationContext.SetOutput(requestTask.Result); } else { // Timeout orchestrationContext.SetOutput(new QueueReplyDto { Name = input.Name, Success = false }); } }
public ActionResult SyncPlayQueue( [FromBody, Required] QueueRequestDto requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); var syncPlayRequest = new QueueGroupRequest(requestData.ItemIds, requestData.Mode); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return(NoContent()); }