지속성 함수의 타이머(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) 또는 time.sleep() (Python) 대신 orchestrator 함수에서 사용 해야 합니다.Durable timers should be used in orchestrator functions instead of Thread.Sleep and Task.Delay (C#), or setTimeout() and setInterval() (JavaScript), or time.sleep() (Python).

CreateTimer createTimer 오케스트레이션 트리거 바인딩의(.net) 메서드 또는 (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 pm 에서만 표시 되는 메시지를 큐 합니다.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.

참고

  • 지 속성 확장의 버전 2.3.0 부터 지 속성 타이머는 무제한입니다.Starting with version 2.3.0 of the Durable Extension, Durable timers are unlimited. 이전 버전의 확장에서 지 속성 타이머는 7 일로 제한 됩니다.In earlier versions of the extension, Durable timers are limited to seven days. 이전 버전을 사용 하 고 7 일 보다 긴 지연이 필요한 경우 루프의 타이머 Api를 사용 while 하 여 이러한 지연을 시뮬레이션 합니다.When you are using an earlier version and need a delay longer than seven days, use the timer APIs in a while loop to simulate this delay.
  • 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. 자세한 내용은 orchestrator 함수 코드 제약 조건 문서를 참조 하세요.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 # 예제는 Durable Functions 2.x를 대상으로 합니다.The previous C# example targets Durable Functions 2.x. 1.x Durable Functions의 경우 대신를 사용 해야 합니다 DurableOrchestrationContext IDurableOrchestrationContext .For Durable Functions 1.x, you must use DurableOrchestrationContext instead of IDurableOrchestrationContext. 버전 간의 차이점에 대 한 자세한 내용은 Durable Functions 버전 문서를 참조 하세요.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 # 예제는 Durable Functions 2.x를 대상으로 합니다.The previous C# example targets Durable Functions 2.x. 1.x Durable Functions의 경우 대신를 사용 해야 합니다 DurableOrchestrationContext IDurableOrchestrationContext .For Durable Functions 1.x, you must use DurableOrchestrationContext instead of IDurableOrchestrationContext. 버전 간의 차이점에 대 한 자세한 내용은 Durable Functions 버전 문서를 참조 하세요.For more information about the differences between versions, see the Durable Functions versions article.

경고

CancellationTokenSource cancel() TimerTask 코드가 완료 될 때까지 기다리지 않는 경우 (.net) 또는 반환 된 (JavaScript)에 대 한 호출을 사용 하 여 지 속성 타이머를 취소 합니다.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.

Orchestrator 함수에서 시간 제한을 구현 하는 방법에 대 한 자세한 예제는 사용자 상호 작용 & 시간 제한-전화 확인 문서를 참조 하세요.For a more in-depth example of how to implement timeouts in orchestrator functions, see the Human Interaction & Timeouts - Phone Verification article.

다음 단계Next steps