프로그래밍/Akka.Net

[Akka.Net] `SchedulerExtensions`사용하여 예약메시지 보내기

Victory_HA 2025. 1. 17. 11:26

https://getakka.net/api/Akka.Actor.SchedulerExtensions.html

SchedulerExtensions 클래스

  • SchedulerExtensions Class에는 다양한 스케줄러 작업에 사용되는 확장 메서드가 포함되어 있습니다.

메서드

ScheduleTellOnce

  • 지정된 시간 후에 메시지가 한 번 전송되도록 예약합니다.
public static void ScheduleTellOnce(this ITellScheduler scheduler, int millisecondsDelay, ICanTell receiver, object message, IActorRef sender, ICancelable cancelable = null)

ScheduleTellOnceCancelable

  • 지정된 시간 후에 메시지가 한 번 전송되도록 예약합니다.
  • 취소가 가능합니다.
public static ICancelable ScheduleTellOnceCancelable(this IScheduler scheduler, int millisecondsDelay, ICanTell receiver, object message, IActorRef sender)

public static ICancelable ScheduleTellOnceCancelable(this IScheduler scheduler, TimeSpan delay, ICanTell receiver, object message, IActorRef sender)

ScheduleTellRepeatedly

  • 초기 지연 후 반복적으로 보낼 메시지를 예약합니다.
public static void ScheduleTellRepeatedly(this ITellScheduler scheduler, int initialMillisecondsDelay, int millisecondsInterval, ICanTell receiver, object message, IActorRef sender, ICancelable cancelable = null)

ScheduleTellRepeatedlyCancelable

  • 초기 지연 후 반복적으로 보낼 메시지를 예약합니다.
  • 취소가 가능합니다.
public static ICancelable ScheduleTellRepeatedlyCancelable(this IScheduler scheduler, int initialMillisecondsDelay, int millisecondsInterval, ICanTell receiver, object message, IActorRef sender)

public static ICancelable ScheduleTellRepeatedlyCancelable(this IScheduler scheduler, TimeSpan initialDelay, TimeSpan interval, ICanTell receiver, object message, IActorRef sender)

샘플코드

using Akka.Actor;

public class TimeActor : ReceiveActor
{
    private ICancelable _scheduler;
    public TimeActor()
    {
        // 2초 간격으로 "Tick!" 메시지를 자기자신한테 보낸다.
        _scheduler = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(
            TimeSpan.FromSeconds(0),
            TimeSpan.FromSeconds(2),
            Self, 
            "Tick!", 
            ActorRefs.NoSender);

        Receive<string>(msg => {
            Console.WriteLine($"{DateTime.Now}");
        });
    }

    protected override void PostStop()
    {
        _scheduler.Cancel();
        base.PostStop();
    }
}

public class Program
{
    static void Main(string[] args)
    {
        var system = ActorSystem.Create("system");
        var timeractor = system.ActorOf(Props.Create(() => new TimeActor()));

        var input = Console.ReadLine();
        system.Terminate();
    }
}

'프로그래밍 > Akka.Net' 카테고리의 다른 글

[Akka.NET] Akka Message 수신 오류  (0) 2024.03.11
[Akka.NET] Akka.NET 가이드  (0) 2023.08.18
[Akka.NET] Stash  (0) 2023.05.30
[Akka.NET] Receive()와 ReceiveAny()  (0) 2023.05.30
[Akka.NET] Akka.NET Blog Archieve  (0) 2023.05.30