Azure Долговечные функции объекта для получения и установки информации о метке времени с помощью триггера таймера - PullRequest
3 голосов
/ 07 августа 2020

Я пытаюсь сохранить информацию о метке времени в долговременных объектах и ​​извлекать ее каждый раз при срабатывании триггера. Вот как я это делаю. Я хочу, чтобы значение отметки времени, установленное текущим выполнением, было доступно для следующего триггера. Но когда элемент управления достигает "string prevTS = await context.CallEntityAsyn c (entityId," Get ");" чтобы снова вернуться к запуску функции. Что мне здесь не хватает.

Я хочу, чтобы выполнение было последовательным между триггерами таймера. '' '

 ***public static class GetOpenDataRealtimeFeed
    {
        [FunctionName("GetOpenDataOrchestrator")]
        public static async Task<List<string>> RunOrchestrator(
            [OrchestrationTrigger] IDurableOrchestrationContext context, Binder binder, ILogger log)
        {
            var outputs = new List<string>();
            var entityId = new EntityId(nameof(GetPrevLastModifiedTimestamp), "entityKey2");
            string prevTS = await context.CallEntityAsync<string>(entityId, "Get");
            
            string currentTS = DateTime.Now.ToString();
            outputs.Add(currentTS);
            outputs.Add(prevTS);
            context.SignalEntity(entityId, "Set", currentTS);
            return null;

        }

        //Durable entity function to get & set the last modified timestamp
        [FunctionName("GetPrevLastModifiedTimestamp")]
        public static void GetPrevLastModifiedTimestamp([EntityTrigger] IDurableEntityContext ctx)
        {
            switch (ctx.OperationName.ToLowerInvariant())
            {
                case "set":
                    ctx.SetState(ctx.GetInput<string>());
                    break;
                case "get":
                    ctx.Return(ctx.GetState<string>());
                    break;
            }
        }


        [FunctionName("getOpenDataRealtimeFeed_Trigger")]
        public static async Task Run(
            [TimerTrigger("%triggerTimer%")] TimerInfo myTimer,
            [DurableClient] IDurableOrchestrationClient starter,
            ILogger log)
        {
            // Function input comes from the request content.
            string instanceId = await starter.StartNewAsync("GetOpenDataOrchestrator", null);
            log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
        }
    }
}*** 

' ''

1 Ответ

1 голос
/ 17 августа 2020

Я предполагаю, что вы имеете в виду текущую строку во время отладки. Если это так, это ожидается, .

Поскольку функции Durable Functions воспроизводят функции после await длительного вызова клиента, выполнение никогда не будет go в течение первого раунда. Только финальный повтор будет «последовательным» перешагом.

...