Example #1
0
        public async Task <bool> StoreNewJob(JobModel job, CancellationToken cancellationToken)
        {
            if (!job.DcJobId.HasValue)
            {
                throw new InvalidOperationException($"No dc job id specified for the job. Job type: {job.JobType:G}");
            }
            cancellationToken.ThrowIfCancellationRequested();
            var jobCache = await GetJobCollection();

            var cachedJob = await jobCache.TryGetValueAsync(reliableTransactionProvider.Current, job.DcJobId.Value, TransactionTimeout, cancellationToken).ConfigureAwait(false);

            if (cachedJob.HasValue)
            {
                logger.LogDebug($"Job has already been stored.");
                return(false);
            }

            await jobCache.AddOrUpdateAsync(reliableTransactionProvider.Current, job.DcJobId.Value,
                                            id => job, (id, existingJob) => job, TransactionTimeout, cancellationToken)
            .ConfigureAwait(false);

            if (job.Id == 0)
            {
                await dataContext.SaveNewJob(job, cancellationToken).ConfigureAwait(false);
            }
            return(true);
        }