public async Task <IJobQueue <TArgs> > GetAsync <TArgs>() { var jobConfiguration = Options.GetJob(typeof(TArgs)); if (JobQueues.TryGetValue(jobConfiguration.JobName, out var jobQueue)) { return((IJobQueue <TArgs>)jobQueue); } using (await SyncSemaphore.LockAsync()) { if (JobQueues.TryGetValue(jobConfiguration.JobName, out jobQueue)) { return((IJobQueue <TArgs>)jobQueue); } jobQueue = (IJobQueue <TArgs>)ServiceProvider .GetRequiredService(typeof(IJobQueue <>).MakeGenericType(typeof(TArgs))); await jobQueue.StartAsync(); JobQueues.TryAdd(jobConfiguration.JobName, jobQueue); return((IJobQueue <TArgs>)jobQueue); } }
public async Task StopAsync(CancellationToken cancellationToken = default) { foreach (var jobQueue in JobQueues.Values) { await jobQueue.StopAsync(cancellationToken); } JobQueues.Clear(); }
public IJob OnQueue(string queue) { if (!JobQueues.Contains(queue)) { throw new ArgumentException($"Queue is not defined: {queue}"); } _queue = new EnqueuedState(queue.ToString()); return(this); }
public IJobQueue <TArgs> Get <TArgs>() { var jobConfiguration = Options.GetJob(typeof(TArgs)); return((IJobQueue <TArgs>)JobQueues.GetOrAdd(jobConfiguration.JobName, _ => { var jobQueue = (IRunnable)ServiceProvider .GetRequiredService(typeof(IJobQueue <>) .MakeGenericType(typeof(TArgs))); AsyncHelper.RunSync(() => jobQueue.StartAsync()); return jobQueue; })); }