Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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)));
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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");
        }
Exemplo n.º 5
0
        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);
                }
            }
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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();
        }
Exemplo n.º 8
0
 public async Task TimeOutRequestReplyAsync()
 {
     IRequestChannel <int, int> channel = new RequestChannel <int, int>();
     AsyncFiber fiber1 = new AsyncFiber();
Exemplo n.º 9
0
 protected AsyncFiberStageBase(Action <Exception> errorCallback = null)
 {
     Fiber = new AsyncFiber(errorCallback);
     Fiber.Subscribe(In, Receive);
 }