■ 액터가 수신 타임 아웃을 처리하는 방법을 보여준다.
▶ NoInfluenceMessage.cs
1 2 3 4 5 6 7 8 9 10 11 12 |
using Proto; namespace TestProject; /// <summary> /// 영향을 주지 않는 메시지 /// </summary> public class NoInfluenceMessage : INotInfluenceReceiveTimeout { } |
▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
using Proto; namespace TestProject; /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { RootContext rootContext = new RootContext(new ActorSystem()); int count = 0; Props props = Props.FromFunc ( context => { switch(context.Message) { case Started _ : Console.WriteLine($"{DateTime.Now:HH:mm:ss} 시작"); context.SetReceiveTimeout(TimeSpan.FromSeconds(1)); break; case ReceiveTimeout _ : count++; Console.WriteLine($"{DateTime.Now:HH:mm:ss} 수신 타임아웃 : {count}"); break; case NoInfluenceMessage _ : Console.WriteLine($"{DateTime.Now:HH:mm:ss} 영향을 주지 않는 메시지 수신"); break; case string message : Console.WriteLine($"{DateTime.Now:HH:mm:ss} 메시지 수신 : {message}"); break; } return Task.CompletedTask; } ); PID pid = rootContext.Spawn(props); for(int i = 0; i < 6; i++) { rootContext.Send(pid, "안녕하세요."); Thread.Sleep(500); } Console.WriteLine("영향을 주지 않는 메시지를 보내기 위해서 RETURN 키를 눌러 주세요."); Console.ReadLine(); for(int i = 0; i < 6; i++) { rootContext.Send(pid, new NoInfluenceMessage()); Thread.Sleep(500); } Console.WriteLine("타임아웃을 취소하기 위한 메시지를 보내기 위해서 RETURN 키를 눌러 주세요."); Console.ReadLine(); rootContext.Send(pid, "취소"); Console.WriteLine("종료하기 위해서 RETURN 키를 눌러 주세요."); Console.ReadLine(); } #endregion } |