0
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;

namespace mynamespace
{
    public static class myfuncclass
    {
        [FunctionName("mydurablefunc")]
        public static async void Run([OrchestrationTrigger] DurableOrchestrationContextBase context)
        {
            await context.CallActivityAsync<string>("timer", "myparam");
        }

        [FunctionName("timer")]
        public static void RunTimer([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, TraceWriter log)
        {
            if (myTimer.IsPastDue)
            {
                log.Info("Timer is running late!");
            }
            log.Info($"Timer trigger function executed at: {DateTime.Now}");
        }
    }
}

我希望我的持久功能启动另一个基于计时器的功能,该功能必须每 5 分钟重新发生一次。到目前为止一切顺利,这是我的代码。现在我希望这个活动在我使用 HTTP 调用(POST、GET 等)调用持久函数时开始(我更喜欢使用 Queue,但不知道该怎么做)并向它传递一个参数,然后它传递这个参数到被调用的函数。如何?

4

1 回答 1

1

您不能“启动”定时器触发器。Orchestrator 只能管理 Activity 函数,如下所示:

[FunctionName("mydurablefunc")]
public static async void Run([OrchestrationTrigger] DurableOrchestrationContextBase context)
{
    for (int i = 0; i < 10; i++)
    {
        DateTime deadline = context.CurrentUtcDateTime.Add(TimeSpan.FromMinutes(5));
        await context.CreateTimer(deadline, CancellationToken.None);
        await context.CallActivityAsync<string>("myaction", "myparam");
    }
}

[FunctionName("myaction")]
public static Task MyAction([ActivityTrigger] string param)
{
    // do something
}
于 2018-08-22T12:27:32.993 回答