public async Task Enqueue <T, TData>(TData data) where T : IJob where TData : new() { var job = new JobV1 { QueuedOn = DateTimeOffset.UtcNow, JobType = typeof(T).AssemblyQualifiedName, JobDataType = typeof(TData).AssemblyQualifiedName, JobData = JsonConvert.SerializeObject(data) }; using (var connection = new ConScope(_dataService)) { using (var transaction = await connection.BeginTransaction()) { await connection.Connection.SaveAsync(job); transaction.Commit(); } } await _jobEnqueued.Publish(this, new JobEnqueuedEvent(new JobTask { JobId = job.Id, Type = typeof(T), Data = data })); }
public async Task MarkJobSucceeded(int jobId) { JobV1 job; using (var connection = new ConScope(_dataService)) { using (var transaction = await connection.BeginTransaction()) { job = await connection.Connection.SingleByIdAsync <JobV1>(jobId); if (job == null) { throw new Exception($"Invalid job id {jobId}"); } if (job.Status != JobStatus.Processing) { throw new Exception($"Can't mark a job {jobId} as completed because it wasn't marked as processing."); } await connection.Connection.DeleteAsync(job); transaction.Commit(); } } await _jobSucceeded.Publish(this, new JobSucceededEvent(new JobTask { JobId = job.Id, Type = Type.GetType(job.JobType), Data = JsonConvert.DeserializeObject(job.JobData, Type.GetType(job.JobDataType)) })); }
public async Task SaveSettings(Action <T> settings) { var instance = default(T); await _settingsService.SaveSetting <T>(x => { settings(x); instance = x; }); await _settingsUpdated.Publish(this, instance); }