private async Task <DecisionTask> PollAmazonSwfForDecisionTaskAsync(TaskList taskList, string pollingIdentity, CancellationToken token, string nextPageToken) { var request = taskList.DecisionTaskPollingRequest(_name, pollingIdentity, nextPageToken); var response = await _simpleWorkflowClient.PollForDecisionTaskAsync(request, token); return(response?.DecisionTask); }
/// <summary> /// Retrieves the next page of history from /// </summary> /// <returns>The next page of history events.</returns> private List <HistoryEvent> GetNextPage() { var request = new PollForDecisionTaskRequest { Domain = _request.Domain, NextPageToken = _lastResponse.NextPageToken, TaskList = _request.TaskList, MaximumPageSize = _request.MaximumPageSize }; const int retryCount = 10; int currentTry = 1; bool pollFailed; do { pollFailed = false; try { _lastResponse = _swfClient.PollForDecisionTaskAsync(request).Result.DecisionTask; } catch (Exception ex) { Console.Error.WriteLine("Poll request failed with exception: " + ex); pollFailed = true; } currentTry += 1; } while (pollFailed && currentTry <= retryCount); return(_lastResponse.Events); }
private async Task <PollForDecisionTaskResponse> PollForDecisionTaskAsync(string domain, string taskList, string workerId, string nextPageToken = null) { return(await _workflow.PollForDecisionTaskAsync(new PollForDecisionTaskRequest { Domain = domain, Identity = workerId, TaskList = new TaskList { Name = taskList }, NextPageToken = nextPageToken })); }
DecisionTask Poll() { Logger.LogMessage("Polling for Decision task ..."); PollForDecisionTaskRequest request = new PollForDecisionTaskRequest() { Domain = Constants.SWF_DOMAIN, TaskList = new TaskList() { Name = Constants.SWF_DECIDER_TASKLIST } }; PollForDecisionTaskResponse response = _swfClient.PollForDecisionTaskAsync(request).Result; return(response.DecisionTask); }
async IAsyncEnumerable <PollForDecisionTaskResponse> IPaginator <PollForDecisionTaskResponse> .PaginateAsync(CancellationToken cancellationToken = default) { if (Interlocked.Exchange(ref _isPaginatorInUse, 1) != 0) { throw new System.InvalidOperationException("Paginator has already been consumed and cannot be reused. Please create a new instance."); } var nextPageToken = _request.NextPageToken; PollForDecisionTaskResponse response; do { _request.NextPageToken = nextPageToken; response = await _client.PollForDecisionTaskAsync(_request, cancellationToken).ConfigureAwait(false); nextPageToken = response.DecisionTask.NextPageToken; cancellationToken.ThrowIfCancellationRequested(); yield return(response); }while (nextPageToken != null); }
/// <summary> /// Polls for descision tasks and decides what decisions to make. /// </summary> internal void PollAndDecide() { Debug.Assert(_workflow != null); while (!_cancellationToken.IsCancellationRequested) { var taskTolken = ""; try { var decisionTaskRequest = new PollForDecisionTaskRequest { Domain = _workflow.Options.Domain, //Identity = _workflow.WorkflowId, TaskList = _workflow.TaskList // This could be a specific TaskList instead of default value from context. }; Logger.Debug("TaskList: {0}", _workflow.TaskList.Name); PollForDecisionTaskResponse decisionTaskResponse = _swfClient.PollForDecisionTaskAsync(decisionTaskRequest).Result; DecisionTask decisionTask = decisionTaskResponse.DecisionTask; taskTolken = decisionTask.TaskToken; if (!string.IsNullOrEmpty(decisionTask.TaskToken)) { Logger.Debug("Get Decision."); // Define a new WorkflowEventsProcessor object and let it make the decision! var workflowProcessor = new WorkflowEventsProcessor(decisionTask, _workflow, decisionTaskRequest, _swfClient, _storageClient); var decisionRequest = workflowProcessor.Decide(); //var decisionRequest = _workflow.Decide(decisionTask, decisionTaskRequest); Logger.Debug("RespondDecisionTaskCompleted."); // We have our decision, send it away and do something more productive with the response _swfClient.RespondDecisionTaskCompletedAsync(decisionRequest).Wait(); } //Sleep to avoid aggressive polling Thread.Sleep(200); } /*catch (AmazonSimpleWorkflowException ex) * { * Logger.Error(ex, ""); * * //if (_workflow != null) * // _workflow.StopWorkers(); * * //if (!string.IsNullOrEmpty(taskTolken)) * //{ * // var respond = _workflow.FailWorkflowRespond(ex.Message, ""); * // respond.TaskToken = taskTolken; * // try * // { * // // Just try to stop workflow. * // _swfClient.RespondDecisionTaskCompleted(respond); * // } * // catch * // { * // } * //} * //Console.WriteLine("Caught Exception: " + ex.Message); * //Console.WriteLine("Response Status Code: " + ex.StatusCode); * //Console.WriteLine("Error Code: " + ex.ErrorCode); * //Console.WriteLine("Error Type: " + ex.ErrorType); * //Console.WriteLine("Request ID: " + ex.RequestId); * //Console.WriteLine("Data: " + ex.Data); * //Console.WriteLine("Stacktrace: " + ex.StackTrace); * }*/ catch (Exception e) { Logger.Error(e, ""); //if (_workflow != null) // _workflow.StopWorkers(); //if (!string.IsNullOrEmpty(taskTolken)) //{ // var respond = _workflow.FailWorkflowRespond(e.Message, ""); // respond.TaskToken = taskTolken; // try // { // // Just try to stop workflow. // _swfClient.RespondDecisionTaskCompleted(respond); // } // catch // { // } //} } } Logger.Info("Exit from Workflow Worker."); }