public async Task <AcknowledgementMessage> ExecuteTask(JobStartedMessage taskMessage) { return(await Task.Delay(100) .ContinueWith <AcknowledgementMessage>(task => { AcknowledgementReceipt receipt = AcknowledgementReceipt.SUCCESS; long taskTime = 0; Task externalTask = Task.Factory.StartNew(() => { // call or execute an external application here }); // wait for task to complete externalTask.Wait(); switch (externalTask.Status) { case TaskStatus.Faulted: receipt = AcknowledgementReceipt.FAILED; break; case TaskStatus.Canceled: receipt = AcknowledgementReceipt.CANCELED; break; case TaskStatus.RanToCompletion: receipt = AcknowledgementReceipt.SUCCESS; break; } // send the acknowledgement return new AcknowledgementMessage(taskMessage.ID, taskMessage.Description, taskTime, receipt); })); }
/// <summary> /// Initializes a new instance of the <see cref="AcknowledgementMessage"/> class /// </summary> /// <param name="id"></param> /// <param name="description"></param> /// <param name="duration"></param> /// <param name="receipt"></param> public AcknowledgementMessage(int id, string description, long duration, AcknowledgementReceipt receipt) { ID = id; Description = description; CompletionTime = duration; Receipt = receipt; }
public async Task <AcknowledgementMessage> ExecuteTask(JobStartedMessage taskMessage) { string outputPath = ConfigurationManager.AppSettings["ClientOutputFolderPath"]; string exePath = ConfigurationManager.AppSettings["ClientExecutablePath"]; string title = string.Format($"Executer : Task {taskMessage.ID}"); outputPath = ConvertToURIPath(outputPath); exePath = ConvertToURIPath(exePath); string extractor1 = outputPath + @"/" + "Extractor1.txt"; string extractor2 = outputPath + @"/" + taskMessage.Description; return(await Task.Delay(100) .ContinueWith <AcknowledgementMessage>(task => { // execute task here long taskTime = 0; int exitCode = 0; AcknowledgementReceipt receipt = AcknowledgementReceipt.SUCCESS; if (string.IsNullOrEmpty(extractor2) || string.IsNullOrEmpty(extractor1) || string.IsNullOrEmpty(outputPath) || string.IsNullOrEmpty(exePath)) { receipt = AcknowledgementReceipt.INVALID_TASK; } else { Task exteranlTask = Task.Factory.StartNew(() => { ExecuteExternalApplication(extractor1, extractor2, outputPath, exePath, title, ref taskTime, ref exitCode); }); // wait for task to complete exteranlTask.Wait(); Console.WriteLine(string.Format("Clpping process for task {0} exited with exit code {1}:", taskMessage.ID.ToString(), exitCode.ToString())); switch (exteranlTask.Status) { case TaskStatus.Faulted: receipt = AcknowledgementReceipt.FAILED; break; case TaskStatus.Canceled: receipt = AcknowledgementReceipt.CANCELED; break; case TaskStatus.RanToCompletion: { if (exitCode == 0 || exitCode == -529697949) { receipt = AcknowledgementReceipt.SUCCESS; } else if (exitCode == -1073741510) { receipt = AcknowledgementReceipt.CANCELED; } else { receipt = AcknowledgementReceipt.FAILED; } break; } } } // send the acknowledgement return new AcknowledgementMessage(taskMessage.ID, taskMessage.Description, taskTime, receipt); })); }