/// <summary>
        /// Do some work. This is where the meat of the processing is done
        /// </summary>
        public async Task <JobResultModel> DoWorkAsync(string jobId, JobParametersModel work,
                                                       CancellationToken cancellationToken)
        {
            // here's an HttpClient if you need one
            var httpClient = _httpClientFactory.CreateClient();

            var next   = work.SeedData;
            var result = new JobResultModel();

            var sw = new Stopwatch();

            sw.Start();
            for (ulong i = 0; i < work.Iterations; ++i)
            {
                next = unchecked (next * 1103515245 + 12345);
                result.CalculatedResult = next / 65536 % 32768;

                await Task.Delay(1000,
                                 cancellationToken).ConfigureAwait(false);        // simulate long-running task.

                // make sure we only update status once a second
                if (sw.ElapsedMilliseconds >= 1000)
                {
                    sw.Restart();
                    await _computationJobStatus.UpdateJobProgressInformationAsync(
                        jobId, $"Current result: {result.CalculatedResult}",
                        i / (double)work.Iterations).ConfigureAwait(false);
                }
            }

            await _computationJobStatus.UpdateJobProgressInformationAsync(
                jobId, $"Done", 1.0).ConfigureAwait(false);

            return(result);
        }
        public async Task StoreJobResultAsync(string jobId, JobResultModel result, JobStatus jobStatus)
        {
            var job = await _jobStorage.ReadAsync(DatabaseKey, jobId).ConfigureAwait(false);

            job.Status    = jobStatus;
            job.JobResult = result;
            await WriteAsync(job).ConfigureAwait(false);
        }
Esempio n. 3
0
 public PingJob(JobModel jobDefinition)
 {
     JobDefinition = jobDefinition;
     State = JobStateEnum.Defined;
     Result = new JobResultModel();
 }