public async Task BasicAsyncTest() { int msWait = 1000 - DateTime.Now.TimeOfDay.Milliseconds - 200; if (msWait < 0) { msWait = msWait + 1000; } await Task.Delay(msWait); int count = 0; Task Action() { count++; return(Task.CompletedTask); } using AsyncFiber fiber = new AsyncFiber(); using (IDisposable sub = fiber.CronSchedule(Action, "0/2 * * 1/1 * ? *")) { await Task.Delay(TimeSpan.FromSeconds(4.1)); } Assert.IsTrue(count >= 2); await Task.Delay(TimeSpan.FromSeconds(8)); Assert.IsTrue(count <= 3); }
public void AsyncSlowerConsumer() { using AsyncFiber fiber1 = new AsyncFiber(size: 4); using Fiber fiber2 = new Fiber(); int count = 0; AutoResetEvent reset = new AutoResetEvent(false); async Task Action(int o) { count++; await Task.Delay(100); if (count == 10) { reset.Set(); } } Channel <int> channel = new Channel <int>(); channel.Subscribe(fiber1, Action); fiber2.Schedule(() => channel.Publish(0), TimeSpan.FromMilliseconds(10), TimeSpan.FromMilliseconds(20)); Assert.IsTrue(reset.WaitOne(TimeSpan.FromSeconds(4))); }
private static void ExceptionTest() { //Exceptions get lost with AsyncFiber, so use an //exception callback var h = new AsyncFiber(); for (int i = 0; i < 10; i++) { h.Enqueue(() => { Console.WriteLine("Test"); throw new Exception(); }); } Console.ReadKey(); }
public void Test() { using AsyncFiber afiber = new AsyncFiber(); using Fiber fiber = new Fiber(); _count = 2; Run(fiber); Run(afiber); Console.WriteLine("2"); _count = 4; Run(afiber); Run(fiber); Console.WriteLine("4"); _count = 10; Run(afiber); Run(fiber); Console.WriteLine("10"); }
public async Task BasicAsyncRequestReplyAsync() { IRequestChannel <int, int> channel = new RequestChannel <int, int>(); AsyncFiber fiber1 = new AsyncFiber(); channel.SetRequestHandler(fiber1, request => { request.Reply(request.Request + 1); return(Task.CompletedTask); }); using (PerfTimer perfTimer = new PerfTimer(1000000)) { for (int i = 0; i < 1000000; i++) { int reply = await channel.SendRequestAsync(0); // Assert.AreEqual(1, reply); } } }
public void AsyncStateChannel() { using AsyncFiber fiber = new AsyncFiber(); string result = null; AutoResetEvent reset = new AutoResetEvent(false); Task Handle(string s) { result = s; reset.Set(); return(Task.CompletedTask); } StateChannel <string> channel = new StateChannel <string>("none"); TimeSpan fromSeconds = TimeSpan.FromSeconds(1); using (IDisposable sub = channel.Subscribe(fiber, Handle)) { Assert.IsTrue(reset.WaitOne(fromSeconds)); Assert.AreEqual("none", result); channel.Publish("one"); Assert.IsTrue(reset.WaitOne(fromSeconds)); Assert.AreEqual("one", result); } result = null; channel.Publish("two"); Thread.Sleep(100); Assert.IsNull(result); using (IDisposable sub = channel.Subscribe(fiber, Handle)) { Assert.IsTrue(reset.WaitOne(fromSeconds)); Assert.AreEqual("two", result); channel.Publish("three"); Assert.IsTrue(reset.WaitOne(fromSeconds)); Assert.AreEqual("three", result); } }
void App_Startup(object sender, StartupEventArgs e) { var messagingPlugInRepository = new MessagingPlugInRepository(); var messagingPluginFinder = new MessagingPluginFinder(messagingPlugInRepository); var unifiedMessenger = new UnifiedMessenger(messagingPlugInRepository); var messagingFiber = new AsyncFiber(Dispatcher); var cachedCredentialRepository = new MessagingCredentialCache(messagingPlugInRepository); var userSecurityPrompt = new UserSecurityPrompt(messagingFiber); messagingPlugInRepository.OnCredentialsRequestedNotify(cachedCredentialRepository); cachedCredentialRepository.OnCredentialsRequestedNotify(userSecurityPrompt); cachedCredentialRepository.OnCredentialsProvidedNotify(unifiedMessenger); userSecurityPrompt.OnCredentialsProvidedNotify(cachedCredentialRepository); var codePasteToUrlService = new CodePasteToUrlService(); var automaticMessageFormatting = new AutoFormatCodePastesAsUrls(codePasteToUrlService); var messageRepository = new MessageRepository(); var unifiedMessagingController = new UnifiedMessagingController(unifiedMessenger, messageRepository, automaticMessageFormatting, messagingFiber); automaticMessageFormatting.OnMessageToSendNotify(unifiedMessagingController); var messagingViewModel = new MessagingViewModel(unifiedMessagingController); var messagingWindow = new MessagingWindow(messagingViewModel); messageRepository.OnAddedMessagesNotify(unifiedMessagingController); unifiedMessagingController.OnReceivedMessagesNotify(messagingViewModel); messagingPluginFinder.GetAllPlugins(); unifiedMessagingController.StartReceiving(); unifiedMessagingController.RequestMessageUpdate(); messagingWindow.Show(); }
public async Task TimeOutRequestReplyAsync() { IRequestChannel <int, int> channel = new RequestChannel <int, int>(); AsyncFiber fiber1 = new AsyncFiber();
protected AsyncFiberStageBase(Action <Exception> errorCallback = null) { Fiber = new AsyncFiber(errorCallback); Fiber.Subscribe(In, Receive); }