如何改善调试功能?

时间:2019-12-14 12:12:12

标签: azure azure-functions

我对代码进行了一些改进,将计时器移至应用程序设置,并在函数的计时器定义中使用了%%变量。

我有一个功能,希望每天晚上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检查

1 个答案:

答案 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
    }
}