Exemplo n.º 1
0
        public void SequenceOfEventsIsRightAndMessageContextIsAvailableAsItShouldBe()
        {
            var done = new ManualResetEvent(false);

            builtinContainerAdapter.HandleAsync <string>(async str =>
            {
                WriteEvent(string.Format("context before doing anything: {0}, tx: {1}, current thread: {2}", MessageContext.HasCurrent, TransactionContext.Current, Thread.CurrentThread.Name));

                await Task.Delay(TimeSpan.FromSeconds(3));
                WriteEvent(string.Format("context after first await: {0}, tx: {1}, current thread: {2}", MessageContext.HasCurrent, TransactionContext.Current, Thread.CurrentThread.Name));

                await Task.Delay(TimeSpan.FromSeconds(3)).ConfigureAwait(false);
                WriteEvent(string.Format("context after ConfigureAwait(false): {0}, tx: {1}, current thread: {2}", MessageContext.HasCurrent, TransactionContext.Current, Thread.CurrentThread.Name));

                done.Set();
            });

            builtinContainerAdapter.Bus.SendLocal("hej med dig!");

            done.WaitUntilSetOrDie(TimeSpan.FromSeconds(10));

            Thread.Sleep(TimeSpan.FromSeconds(1));

            var eventsArray = events.ToArray();

            Console.WriteLine(@"
------------------------------------------------------------------
Got events:

{0}
------------------------------------------------------------------
", string.Join(Environment.NewLine, eventsArray));

            Assert.That(eventsArray, Is.EqualTo(new[]
            {
                "msg context established",

                "uow started",

                "context before doing anything: True, tx: handler tx on thread 'Rebus 1 worker 1', current thread: Rebus 1 worker 1",
                "context after first await: True, tx: handler tx on thread 'Rebus 1 worker 1', current thread: Rebus 1 worker 1",
                "context after ConfigureAwait(false): True, tx: handler tx on thread 'Rebus 1 worker 1', current thread: ",

                "uow commit",
                "uow dispose",

                "msg context disposed"
            }));
        }
        public void PeekLockRenewalJustWorks()
        {
            var done = new ManualResetEvent(false);

            adapter.HandleAsync(async(string str) =>
            {
                LogEvent("entered!");

                await Task.Delay(TimeSpan.FromMinutes(1));

                LogEvent("waited one minute");

                await Task.Delay(TimeSpan.FromMinutes(1));

                LogEvent("waited two minutes");

                await Task.Delay(TimeSpan.FromMinutes(1));

                LogEvent("waited three minutes");

                LogEvent("done!");

                done.Set();
            });

            Console.WriteLine("Starting!");
            adapter.Bus.SendLocal("hej");

            done.WaitUntilSetOrDie(TimeSpan.FromMinutes(5));

            Console.WriteLine("Done!");
            Console.WriteLine();

            Console.WriteLine(@"LOG---------------------------------------------------------------------
{0}
------------------------------------------------------------------------", string.Join(Environment.NewLine, events));
        }