![](/img/trans.png)
[英]How can I use Authorize attributes in HttpTrigger of Azure Function
[英]Timer function blocks HttpTrigger Azure function ap
我有 1 个 function 应用程序项目,带有一个定时器触发器和一个 http 触发器。 (是否使用 DI,似乎并不重要)
定时器触发器:
public static class Timer
{
[FunctionName("Timer")]
public static void Run([TimerTrigger("0 */5 * * * *", RunOnStartup =true)]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
Thread.Sleep(10000);//this is just for demonstrating the behavior!!
log.LogInformation($"C# Timer trigger function executed done");
}
}
http 触发器:
public static class Function1
{
[FunctionName("test2")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
ILogger log)
{
return new OkObjectResult("Done");
}
}
问题是,当计时器运行时,所有请求都被阻止。 导致“错误:连接 ECONNREFUSED 127.0.0.1:7071”
我在这里和那里(主要是在评论中)读到不支持多个触发器,但这对我来说没有意义,因为无论如何一切似乎都已准备就绪(我的意思是:我找不到关于它的任何结论性文档, VS 不会抛出任何阻力来添加多个,甚至调试界面和 azure 界面也很好地总结了它能找到的所有功能......)
这种行为是预期的,还是我可以更改某些设置以使其并行运行?
此行为是预期的,因为您通过运行Thread.Sleep()
完全停止了 Azure Functions 进程。 只要您的 Function 应用程序没有扩展到多个实例,就只有一个进程在运行您的函数。 这就是异步工作的用武之地。
如果您将计时器触发 function 更改为此,它应该可以正常工作。
[FunctionName("Timer")]
public static async Task Run([TimerTrigger("0 */5 * * * *", RunOnStartup=true)] TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
await Task.Delay(10000);
log.LogInformation($"C# Timer trigger function executed done");
}
接下来,请注意:
RunOnStartup
设置为true
触发器是导致 function 运行的原因。 触发器定义如何调用 function,并且 function 必须只有一个触发器。 触发器具有关联数据,通常作为 function 的有效负载提供。
来源: Azure 函数触发器和绑定概念
编辑:
对其进行了测试,当 Function 为async
时以及它在 Azure 上运行时也会发生这种情况。这意味着 Function 的初始运行与runAtStartup=true
始终阻止任何其他传入请求,并且启用runOnStartup
时调用触发器function 应用程序已缩放。
事实证明这是因为RunOnStartup
。 在初始运行之后的任何计划运行都没有此问题。
但是,如果RunOnStartup = false
,触发器仍然可能在启动时被调用,然后它确实有问题。
如评论中所述, async
不会改变任何东西(我在实际场景中实际上使用了async
和 DI,但在这里简化了示例。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.