지속성 함수의 타이머(Azure Functions)Timers in Durable Functions (Azure Functions)

지속성 함수는 지연을 구현하거나 비동기 작업에 대한 시간 제한을 설정하기 위해 오케스트레이터 함수에 사용할 지속성 타이머를 제공합니다.Durable Functions provides durable timers for use in orchestrator functions to implement delays or to set up timeouts on async actions. 지속성 타이머는 Thread.SleepTask.Delay(C#) 또는 setTimeout()setInterval()(JavaScript) 대신, 오케스트레이터 함수에 사용해야 합니다.Durable timers should be used in orchestrator functions instead of Thread.Sleep and Task.Delay (C#), or setTimeout() and setInterval() (JavaScript).

CreateTimer 오케스트레이션 트리거 바인딩의(.NET) 메서드 createTimer 또는 (JavaScript) 메서드를 호출 하여 내구성 있는 타이머를 만듭니다.You create a durable timer by calling the CreateTimer (.NET) method or the createTimer (JavaScript) method of the orchestration trigger binding. 메서드는 지정된 날짜 및 시간에 완료 되는 작업을 반환 합니다.The method returns a task that completes on a specified date and time.

타이머 제한 사항Timer limitations

오후 4시 30분에 만료되는 타이머를 만들면 기본 지속적 작업 프레임워크는 오후 4시 30분에만 표시되는 메시지를 큐에 대기합니다.When you create a timer that expires at 4:30 pm, the underlying Durable Task Framework enqueues a message that becomes visible only at 4:30 pm. Azure Functions 소비 계획에서 실행 될 때 새로 보이는 타이머 메시지 함수 응용 프로그램 적절 한 VM에서 활성화 되 면 확인 합니다.When running in the Azure Functions Consumption plan, the newly visible timer message will ensure that the function app gets activated on an appropriate VM.

참고

  • 내구성이 뛰어난 타이머는 현재 7일로 제한됩니다.Durable timers are currently limited to 7 days. 더 긴 지연이 필요한 경우 루프의 타이머 API를 while 사용하여 시뮬레이션할 수 있습니다.If longer delays are needed, they can be simulated using the timer APIs in a while loop.
  • 내구성이 CurrentUtcDateTime 뛰어난 DateTime.UtcNow 타이머의 currentUtcDateTime 가동 Date.now 중지 Date.UTC 시간을 계산할 때는 항상 .NET 대신 사용하거나 JavaScript 대신 사용하십시오.Always use CurrentUtcDateTime instead of DateTime.UtcNow in .NET or currentUtcDateTime instead of Date.now or Date.UTC in JavaScript when computing the fire time for durable timers. 자세한 내용은 오케스트레이터 함수 코드 제약 조건 문서를 참조하세요.For more information, see the orchestrator function code constraints article.

지연 사용Usage for delay

다음 예제에서는 실행 지연에 지속성 타이머를 사용하는 방법을 보여 줍니다.The following example illustrates how to use durable timers for delaying execution. 이 예제는 10일 동안 매일 청구 알림을 발행하는 것입니다.The example is issuing a billing notification every day for 10 days.

[FunctionName("BillingIssuer")]
public static async Task Run(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    for (int i = 0; i < 10; i++)
    {
        DateTime deadline = context.CurrentUtcDateTime.Add(TimeSpan.FromDays(1));
        await context.CreateTimer(deadline, CancellationToken.None);
        await context.CallActivityAsync("SendBillingEvent");
    }
}

참고

이전 C# 예제는 내구성 함수 2.x를 대상으로 합니다.The previous C# example targets Durable Functions 2.x. 지속 기능 1.x의 경우 DurableOrchestrationContext IDurableOrchestrationContext을 대신 사용해야 합니다.For Durable Functions 1.x, you must use DurableOrchestrationContext instead of IDurableOrchestrationContext. 버전 간의 차이점에 대한 자세한 내용은 지속 형 기능 버전 문서를 참조하십시오.For more information about the differences between versions, see the Durable Functions versions article.

경고

오케스트레이터 함수에는 무한 루프를 사용하지 않도록 방지하세요.Avoid infinite loops in orchestrator functions. 무한 루프 시나리오를 안전하고 효율적으로 구현하는 방법에 대한 자세한 내용은 영구 오케스트레이션을 참조하세요.For information about how to safely and efficiently implement infinite loop scenarios, see Eternal Orchestrations.

시간 제한 사용Usage for timeout

이 예제에서는 지속성 타이머를 사용하여 시간 제한을 구현하는 방법을 보여 줍니다.This example illustrates how to use durable timers to implement timeouts.

[FunctionName("TryGetQuote")]
public static async Task<bool> Run(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    TimeSpan timeout = TimeSpan.FromSeconds(30);
    DateTime deadline = context.CurrentUtcDateTime.Add(timeout);

    using (var cts = new CancellationTokenSource())
    {
        Task activityTask = context.CallActivityAsync("GetQuote");
        Task timeoutTask = context.CreateTimer(deadline, cts.Token);

        Task winner = await Task.WhenAny(activityTask, timeoutTask);
        if (winner == activityTask)
        {
            // success case
            cts.Cancel();
            return true;
        }
        else
        {
            // timeout case
            return false;
        }
    }
}

참고

이전 C# 예제는 내구성 함수 2.x를 대상으로 합니다.The previous C# example targets Durable Functions 2.x. 지속 기능 1.x의 경우 DurableOrchestrationContext IDurableOrchestrationContext을 대신 사용해야 합니다.For Durable Functions 1.x, you must use DurableOrchestrationContext instead of IDurableOrchestrationContext. 버전 간의 차이점에 대한 자세한 내용은 지속 형 기능 버전 문서를 참조하십시오.For more information about the differences between versions, see the Durable Functions versions article.

경고

코드가 CancellationTokenSource 완료될 때까지 기다리지 않을 TimerTask 경우 반환된(JavaScript)을 호출하여 cancel() 지속가능한 타이머를 취소합니다.Use a CancellationTokenSource (.NET) or call cancel() on the returned TimerTask (JavaScript) to cancel a durable timer if your code will not wait for it to complete. 지속형 작업 프레임워크는 모든 미해결 작업이 완료되거나 취소될 때까지 오케스트레이션의 상태를 "완료"로 변경하지 않습니다.The Durable Task Framework will not change an orchestration's status to "completed" until all outstanding tasks are completed or canceled.

이 취소 메커니즘은 진행 중인 활동 함수 또는 하위 오케스트레이션 실행을 종료하지 않습니다.This cancellation mechanism doesn't terminate in-progress activity function or sub-orchestration executions. 대신 단순히 오케스트레이터 함수를 사용하여 결과를 무시하고 계속 진행할 수 있습니다.Rather, it simply allows the orchestrator function to ignore the result and move on. 함수 앱에서 소비 계획을 사용하는 경우 중단된 활동 함수에서 소비하는 모든 시간과 메모리에 대한 요금이 계속 청구됩니다.If your function app uses the Consumption plan, you'll still be billed for any time and memory consumed by the abandoned activity function. 기본적으로 소비 계획에서 실행되는 함수의 시간 제한은 5분입니다.By default, functions running in the Consumption plan have a timeout of five minutes. 이 제한을 초과하면 모든 실행을 중지하고 런어웨이 청구 상황을 방지하기 위해 Azure Functions 호스트가 재활용됩니다.If this limit is exceeded, the Azure Functions host is recycled to stop all execution and prevent a runaway billing situation. 함수 시간 제한은 구성 가능합니다.The function timeout is configurable.

오케스트레이터 함수에서 시간 시간을 구현하는 방법에 대한 자세한 예제는 휴먼 상호 작용 & 시간 설정 - 전화 확인 문서를 참조하십시오.For a more in-depth example of how to implement timeouts in orchestrator functions, see the Human Interaction & Timeouts - Phone Verification article.

다음 단계Next steps