c# - 定时器功能块 HttpTrigger Azure 功能 ap
问题描述
我有 1 个函数应用程序项目,带有一个 Timer 触发器和一个 http 触发器。(使用与否,似乎无关紧要)
定时器触发器:
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不会对添加多个产生任何阻力,甚至调试界面和天蓝色界面也很好地总结了它可以找到的所有功能......)
这是预期的行为,还是我可以更改一些设置以使其并行运行?
解决方案
这种行为是意料之中的,因为您通过运行Thread.Sleep()
. 只要您的 Function App 没有扩展到多个实例,就只有一个进程在运行您的 Functions。这就是异步工作的用武之地。
如果您将计时器触发功能更改为此,它应该可以正常工作。
[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 为 时也会发生这种情况async
,并且在 Azure 上运行时也会发生这种情况。这意味着函数的初始运行runAtStartup=true
始终会阻止任何其他传入请求,并且runOnStartup
启用触发器时,只要扩展函数应用程序就会调用该触发器。
推荐阅读
- python - 如何从 ndarray 的列中索引元素,以使输出是列向量?
- python - 推送到 heroku 失败
- linux - Shell脚本以进程名称和时间作为输入在特定时间杀死进程
- javascript - 在纯JS中检查页面上是否存在元素
- spring - 缓存和提高 JpaRepository 方法的性能
- android - 如何修复 Android Studio 3.5 上的“等待构建完成”错误
- java - 如何使用 Nimbus-Jose-Jwt 解码 JWT 令牌以获取 Header 和 Payload 的详细信息?
- angular - Observable 不会退出 foreach?
- winforms - 调整自动滚动面板的大小会影响滚动位置
- postgresql - Kong 无法连接到 PostgreSQL