public void Cancellation()
        {
            var count = 0;

            ContainerLifecycle.CancellationToken.Register(() => count++);
            Task.Factory.StartNew(() =>
            {
                Task.Delay(500).GetAwaiter().GetResult();
            }).ContinueWith(t =>
            {
                ContainerLifecycle.End();
            });

            try
            {
                Task.Delay(5000, ContainerLifecycle.CancellationToken).GetAwaiter().GetResult();
            }
            catch (TaskCanceledException)
            {
            }

            Task.Delay(1000).GetAwaiter().GetResult();

            Assert.IsTrue(ContainerLifecycle.CancellationToken.IsCancellationRequested, "Cancellation token was not triggered");
            Assert.IsTrue(count == 1, "Count was not expected");
        }
        public void TaskDelay()
        {
            var count = 0;

            ContainerLifecycle.CancellationToken.Register(() => count++);
            Task.Factory.StartNew(() =>
            {
                Task.Delay(500).GetAwaiter().GetResult();
            }).ContinueWith(t =>
            {
                ContainerLifecycle.End();
            });

            var taskCompleted = Task.WhenAny(ContainerLifecycle.Task, Task.Delay(5000, ContainerLifecycle.CancellationToken)).GetAwaiter().GetResult();

            Assert.IsTrue(ContainerLifecycle.Task.IsCompleted, "Cancellation token was not triggered");
            Assert.IsTrue(taskCompleted.Id == ContainerLifecycle.Task.Id, "Task id completed as expected");
        }
示例#3
0
        private ILifecycle GetLifecycle(RegistrationLifestyle lifestyle)
        {
            ILifecycle lifecycle = null;

            switch (lifestyle)
            {
            case RegistrationLifestyle.Singleton:
                lifecycle = new SingletonLifecycle();
                break;

            case RegistrationLifestyle.SingletonPerScope:
                lifecycle = new ContainerLifecycle();
                break;

            case RegistrationLifestyle.SingletonPerObjectGraph:
            case RegistrationLifestyle.Transient:
                lifecycle = new TransientLifecycle();
                break;
            }

            return(lifecycle);
        }