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); }