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