Skip to content

Commit 69f0458

Browse files
committed
fix: ensure new scoped serviceprovider for every job that is instantiated.
1 parent d452aed commit 69f0458

2 files changed

Lines changed: 5 additions & 6 deletions

File tree

src/ByteBard.GUSTO.Examples/InMemoryJobStorageProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
public class InMemoryJobStorageProvider : IJobStorageProvider<JobRecord>
66
{
7-
private readonly List<JobRecord> _jobs = new();
7+
private static readonly List<JobRecord> _jobs = new();
88
private readonly object _lock = new();
99

1010
public Task StoreJobAsync(JobRecord jobStorageRecord, CancellationToken cancellationToken)

src/ByteBard.GUSTO.JobQueue/JobQueueWorker.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ private async Task ProcessBatchCycleAsync(ParallelOptions parallelOptions, Cance
140140
return;
141141
}
142142

143-
await ProcessBatchAsync(jobStorageRecords, storage, scope.ServiceProvider, parallelOptions);
143+
await ProcessBatchAsync(jobStorageRecords, storage, parallelOptions);
144144
}
145145

146146
private async Task<IEnumerable<TStorageRecord>> FetchPendingJobsAsync(
@@ -162,7 +162,6 @@ private async Task<IEnumerable<TStorageRecord>> FetchPendingJobsAsync(
162162
private async Task ProcessBatchAsync(
163163
List<TStorageRecord> jobStorageRecords,
164164
IJobStorageProvider<TStorageRecord> storage,
165-
IServiceProvider scopedServiceProvider,
166165
ParallelOptions parallelOptions)
167166
{
168167
using var batchActivity = ActivitySource.StartActivity("ProcessBatch");
@@ -173,7 +172,7 @@ private async Task ProcessBatchAsync(
173172

174173
await Parallel.ForEachAsync(jobStorageRecords, parallelOptions, async (storedJob, ct) =>
175174
{
176-
await ExecuteJobAsync(storedJob, storage, scopedServiceProvider, ct);
175+
await ExecuteJobAsync(storedJob, storage, ct);
177176
});
178177

179178
batchStopwatch.Stop();
@@ -184,7 +183,6 @@ await Parallel.ForEachAsync(jobStorageRecords, parallelOptions, async (storedJob
184183
private async Task ExecuteJobAsync(
185184
TStorageRecord storedJob,
186185
IJobStorageProvider<TStorageRecord> storage,
187-
IServiceProvider scopedServiceProvider,
188186
CancellationToken ct)
189187
{
190188
using var jobActivity = ActivitySource.StartActivity("ExecuteJob");
@@ -197,7 +195,8 @@ private async Task ExecuteJobAsync(
197195
{
198196
var jobType = Type.GetType(storedJob.JobType);
199197
var arguments = JsonConvert.DeserializeObject<object[]>(storedJob.ArgumentsJson, _settings);
200-
var jobInstance = ActivatorUtilities.CreateInstance(scopedServiceProvider, jobType);
198+
using var scope = _serviceProvider.CreateScope();
199+
var jobInstance = ActivatorUtilities.CreateInstance(scope.ServiceProvider, jobType);
201200
var method = jobType.GetMethod(storedJob.MethodName);
202201
await (Task)method.Invoke(jobInstance, arguments);
203202

0 commit comments

Comments
 (0)