-
Notifications
You must be signed in to change notification settings - Fork 41
Expand file tree
/
Copy pathUpdatableTimer.cs
More file actions
42 lines (33 loc) · 1.16 KB
/
UpdatableTimer.cs
File metadata and controls
42 lines (33 loc) · 1.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using Microsoft.Extensions.Logging;
using Temporalio.Workflows;
namespace TemporalioSamples.UpdatableTimer;
public class UpdatableTimer(DateTimeOffset wakeUpTime)
{
private bool wakeUpTimeUpdated;
private DateTimeOffset wakeUpTime = wakeUpTime;
public async Task SleepAsync()
{
Workflow.Logger.LogInformation("Sleep until: {WakeUpTime}", wakeUpTime);
while (true)
{
var sleepInterval = wakeUpTime - Workflow.UtcNow;
if (sleepInterval <= TimeSpan.Zero)
{
break;
}
Workflow.Logger.LogInformation("Going to sleep for {SleepInterval}", sleepInterval);
wakeUpTimeUpdated = false;
if (!await Workflow.WaitConditionWithOptionsAsync(new(() => wakeUpTimeUpdated, sleepInterval, $"Going to sleep for {sleepInterval}")))
{
break;
}
}
Workflow.Logger.LogInformation("Sleep completed");
}
public void UpdateWakeUpTime(DateTimeOffset newWakeUpTime)
{
wakeUpTime = newWakeUpTime;
wakeUpTimeUpdated = true;
}
public DateTimeOffset WakeUpTime => wakeUpTime;
}