我对代码进行了一些改进,将计时器移至应用程序设置,并在函数的计时器定义中使用了%%变量。
我有一个功能,希望每天晚上1点运行。但是对于调试,我真的希望它在启动后尽快启动。我通过在本地应用程序设置中将模式设置为5 * * * * *
计时器,在Azure的应用程序配置中将模式设置为0 0 1 * * *
来解决了这个问题。
但是我不想让它实际上每5秒钟运行一次,我只希望它在调试时尽快启动。因此,我添加了一个计数器变量。仅启用第一次运行即可前进:
private static int count = 0;
[Disable]
[FunctionName("FetchProjects")]
async public static void Run([TimerTrigger("%FetchProjectsTimer%")]TimerInfo myTimer, TraceWriter log)
{
#if DEBUG
if (count != 0) return;
count++;
#endif
如果可以的话,我该如何改善呢?该计数不是线程安全的,如果可能,我想删除#if DEBUG检查
答案 0 :(得分:0)
目前尚不清楚您要实现的目标。您只想测试时间触发的逻辑?单元测试呢(只是逻辑)。
我通常将Azure功能尽可能地简化,并对业务逻辑进行单元测试。这是您的操作方法:
public static class Function1
{
[FunctionName("Function1")]
public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
FooService.DoFoo();
}
[FunctionName("Function2")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
FooService.DoFoo();
return new OkObjectResult($"Success");
}
}
//extracted logic which I will be tested by Nunit
public static class FooService
{
public static void DoFoo()
{
//some logic in here
}
}