Skip to content

Commit c31bb92

Browse files
committed
fix: Don't allow multiple runs
1 parent c2d817e commit c31bb92

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

src/LinkDotNet.Blog.Web/Features/TransformBlogPostRecordsService.cs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ namespace LinkDotNet.Blog.Web.Features;
1212

1313
public sealed partial class TransformBlogPostRecordsService : IJob
1414
{
15+
private static readonly SemaphoreSlim Semaphore = new(1, 1);
1516
private readonly IRepository<BlogPost> blogPostRepository;
1617
private readonly IRepository<UserRecord> userRecordRepository;
1718
private readonly IRepository<BlogPostRecord> blogPostRecordRepository;
@@ -31,9 +32,25 @@ public TransformBlogPostRecordsService(
3132

3233
public async Task RunAsync(JobExecutionContext context, CancellationToken token)
3334
{
34-
LogTransformStarted();
35-
await TransformRecordsAsync();
36-
LogTransformStopped();
35+
// In the future version of NCronJob we don't need this here,
36+
// but can configure it via the AddCronJob method or similar ways
37+
var hasLock = await Semaphore.WaitAsync(0, token);
38+
if (!hasLock)
39+
{
40+
LogSkippingRun();
41+
return;
42+
}
43+
44+
try
45+
{
46+
LogTransformStarted();
47+
await TransformRecordsAsync();
48+
LogTransformStopped();
49+
}
50+
finally
51+
{
52+
Semaphore.Release();
53+
}
3754
}
3855

3956
private static IEnumerable<BlogPostRecord> GetBlogPostRecords(
@@ -112,4 +129,7 @@ private async Task TransformRecordsAsync()
112129

113130
[LoggerMessage(Level = LogLevel.Information, Message = "Deleted records from UserRecord-Table")]
114131
private partial void LogDeletedUserRecords();
132+
133+
[LoggerMessage(Level = LogLevel.Information, Message = "There is already a running job. Skipping this run.")]
134+
private partial void LogSkippingRun();
115135
}

0 commit comments

Comments
 (0)