Skip to content

Commit 8853e14

Browse files
committed
fb
1 parent aed2a48 commit 8853e14

File tree

2 files changed

+85
-67
lines changed

2 files changed

+85
-67
lines changed

samples/ScheduleConsoleApp/Program.cs

Lines changed: 4 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using Microsoft.Extensions.DependencyInjection;
1111
using Microsoft.Extensions.Hosting;
1212
using Microsoft.Extensions.Logging;
13+
using ScheduleConsoleApp;
1314

1415
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
1516

@@ -49,73 +50,9 @@
4950
IHost host = builder.Build();
5051
await host.StartAsync();
5152

53+
// Run the schedule operations
5254
IScheduledTaskClient scheduledTaskClient = host.Services.GetRequiredService<IScheduledTaskClient>();
53-
54-
try
55-
{
56-
// list all schedules
57-
// Define the initial query with the desired page size
58-
ScheduleQuery query = new ScheduleQuery { PageSize = 100 };
59-
60-
// Retrieve the pageable collection of schedule IDs
61-
AsyncPageable<string> schedules = await scheduledTaskClient.ListScheduleIdsAsync(query);
62-
63-
// Initialize the continuation token
64-
await foreach (string scheduleId in schedules)
65-
{
66-
// Obtain the schedule handle for the current scheduleId
67-
IScheduleHandle handle = scheduledTaskClient.GetScheduleHandle(scheduleId);
68-
69-
// Delete the schedule
70-
await handle.DeleteAsync();
71-
72-
Console.WriteLine($"Deleted schedule {scheduleId}");
73-
}
74-
75-
// Create schedule options that runs every 4 seconds
76-
ScheduleCreationOptions scheduleOptions = new ScheduleCreationOptions("demo-schedule101", nameof(StockPriceOrchestrator), TimeSpan.FromSeconds(4))
77-
{
78-
StartAt = DateTimeOffset.UtcNow,
79-
OrchestrationInput = "MSFT"
80-
};
81-
82-
// Create the schedule and get a handle to it
83-
IScheduleHandle scheduleHandle = await scheduledTaskClient.CreateScheduleAsync(scheduleOptions);
84-
85-
// Get the schedule description
86-
ScheduleDescription scheduleDescription = await scheduleHandle.DescribeAsync();
87-
88-
// print the schedule description
89-
Console.WriteLine(scheduleDescription);
90-
91-
Console.WriteLine("");
92-
Console.WriteLine("");
93-
Console.WriteLine("");
94-
95-
// Pause the schedule
96-
Console.WriteLine("\nPausing schedule...");
97-
await scheduleHandle.PauseAsync();
98-
scheduleDescription = await scheduleHandle.DescribeAsync();
99-
Console.WriteLine(scheduleDescription);
100-
Console.WriteLine("");
101-
Console.WriteLine("");
102-
Console.WriteLine("");
103-
104-
// Resume the schedule
105-
Console.WriteLine("\nResuming schedule...");
106-
await scheduleHandle.ResumeAsync();
107-
scheduleDescription = await scheduleHandle.DescribeAsync();
108-
Console.WriteLine(scheduleDescription);
109-
110-
Console.WriteLine("");
111-
Console.WriteLine("");
112-
Console.WriteLine("");
113-
114-
await Task.Delay(TimeSpan.FromMinutes(30));
115-
}
116-
catch (Exception ex)
117-
{
118-
Console.WriteLine($"One of your schedule operations failed, please fix and rerun: {ex.Message}");
119-
}
55+
ScheduleOperations scheduleOperations = new ScheduleOperations(scheduledTaskClient);
56+
await scheduleOperations.RunAsync();
12057

12158
await host.StopAsync();
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
using Microsoft.DurableTask;
5+
using Microsoft.DurableTask.ScheduledTasks;
6+
7+
namespace ScheduleConsoleApp;
8+
9+
class ScheduleOperations(IScheduledTaskClient scheduledTaskClient)
10+
{
11+
readonly IScheduledTaskClient scheduledTaskClient = scheduledTaskClient ?? throw new ArgumentNullException(nameof(scheduledTaskClient));
12+
13+
public async Task RunAsync()
14+
{
15+
try
16+
{
17+
await this.DeleteExistingSchedulesAsync();
18+
await this.CreateAndManageScheduleAsync();
19+
}
20+
catch (Exception ex)
21+
{
22+
Console.WriteLine($"One of your schedule operations failed, please fix and rerun: {ex.Message}");
23+
}
24+
}
25+
26+
async Task DeleteExistingSchedulesAsync()
27+
{
28+
// Define the initial query with the desired page size
29+
ScheduleQuery query = new ScheduleQuery { PageSize = 100 };
30+
31+
// Retrieve the pageable collection of schedule IDs
32+
AsyncPageable<string> schedules = await this.scheduledTaskClient.ListScheduleIdsAsync(query);
33+
34+
// Delete each existing schedule
35+
await foreach (string scheduleId in schedules)
36+
{
37+
IScheduleHandle handle = this.scheduledTaskClient.GetScheduleHandle(scheduleId);
38+
await handle.DeleteAsync();
39+
Console.WriteLine($"Deleted schedule {scheduleId}");
40+
}
41+
}
42+
43+
async Task CreateAndManageScheduleAsync()
44+
{
45+
// Create schedule options that runs every 4 seconds
46+
ScheduleCreationOptions scheduleOptions = new ScheduleCreationOptions(
47+
"demo-schedule101",
48+
nameof(StockPriceOrchestrator),
49+
TimeSpan.FromSeconds(4))
50+
{
51+
StartAt = DateTimeOffset.UtcNow,
52+
OrchestrationInput = "MSFT"
53+
};
54+
55+
// Create the schedule and get a handle to it
56+
IScheduleHandle scheduleHandle = await this.scheduledTaskClient.CreateScheduleAsync(scheduleOptions);
57+
58+
// Get and print the initial schedule description
59+
await PrintScheduleDescriptionAsync(scheduleHandle);
60+
61+
// Pause the schedule
62+
Console.WriteLine("\nPausing schedule...");
63+
await scheduleHandle.PauseAsync();
64+
await PrintScheduleDescriptionAsync(scheduleHandle);
65+
66+
// Resume the schedule
67+
Console.WriteLine("\nResuming schedule...");
68+
await scheduleHandle.ResumeAsync();
69+
await PrintScheduleDescriptionAsync(scheduleHandle);
70+
71+
// Wait for a while to let the schedule run
72+
await Task.Delay(TimeSpan.FromMinutes(30));
73+
}
74+
75+
static async Task PrintScheduleDescriptionAsync(IScheduleHandle scheduleHandle)
76+
{
77+
ScheduleDescription scheduleDescription = await scheduleHandle.DescribeAsync();
78+
Console.WriteLine(scheduleDescription);
79+
Console.WriteLine("\n\n");
80+
}
81+
}

0 commit comments

Comments
 (0)