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 ( "\n Pausing schedule..." ) ;
63+ await scheduleHandle . PauseAsync ( ) ;
64+ await PrintScheduleDescriptionAsync ( scheduleHandle ) ;
65+
66+ // Resume the schedule
67+ Console . WriteLine ( "\n Resuming 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