I’m new to using the isolated worker model in .NET8. I’m trying to create a new function that will execute daily at a specific time. I’ve spent several days looking at the documentation on how to use the isolated worker for a timer function but seem to be getting lost in the weeds. I tried the MS Learn example, but that is a http trigger. not sure how to set up the application for a timer trigger. Any help in where I might find a solution would be appreciated.
This is what I tried however when I run it locally it produces an URL that must be used in a browser to execute:
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Azure.Functions.Worker;
using Microsoft.DurableTask;
using Microsoft.DurableTask.Client;
using Microsoft.Extensions.Logging;
static class ProcessCustomers
{
[Function(nameof(ProcessCustomerEmailAccounts))]
public static async Task<string> ProcessCustomerEmailAccounts([OrchestrationTrigger] TaskOrchestrationContext context)
{
// Calculate the next occurrence of 11:30 PM today
DateTime now = context.CurrentUtcDateTime;
DateTime nextScheduledTime = new DateTime(now.Year, now.Month, now.Day, 23, 30, 0);
if (now > nextScheduledTime)
{
// If it's already past 11:30 PM today, schedule for tomorrow
nextScheduledTime = nextScheduledTime.AddDays(1);
}
// Set the timer for the next occurrence
await context.CreateTimer(nextScheduledTime, CancellationToken.None);
string result = "";
result += await context.CallActivityAsync<string>(nameof(SayHello), "Tokyo") + " ";
result += await context.CallActivityAsync<string>(nameof(SayHello), "London") + " ";
result += await context.CallActivityAsync<string>(nameof(SayHello), "Seattle");
return result;
}
[Function(nameof(SayHello))]
public static async Task<string> SayHello([ActivityTrigger] string cityName, FunctionContext executionContext)
{
ILogger logger = executionContext.GetLogger(nameof(SayHello));
logger.LogInformation("Saying hello to {name}", cityName);
return await Task.FromResult($"Hello, {cityName}!");
}
[Function(nameof(StartProcessCustomerEmailAccounts))]
public static async Task<HttpResponseData> StartProcessCustomerEmailAccounts(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
[DurableClient] DurableTaskClient client,
FunctionContext executionContext)
{
ILogger logger = executionContext.GetLogger(nameof(StartProcessCustomerEmailAccounts));
string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(nameof(ProcessCustomerEmailAccounts));
logger.LogInformation("Created new orchestration with instance ID = {instanceId}", instanceId);
return await client.CreateCheckStatusResponseAsync(req, instanceId);
}
}
AlanK is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.