[Fact] // See http://caliburnmicro.codeplex.com/discussions/430917
        public async Task TryCloseStressTest()
        {
            var conductor = new Conductor <IScreen> .Collection.OneActive();

            var conducted = Enumerable.Range(0, 10000)
                            .Select(i => new Screen {
                DisplayName = i.ToString(CultureInfo.InvariantCulture)
            });

            conductor.Items.AddRange(conducted);

            var defered1 = new DeferredCloseScreen {
                DisplayName = "d1", IsClosable = true
            };
            var defered2 = new DeferredCloseScreen {
                DisplayName = "d2", IsClosable = true
            };

            conductor.Items.Insert(0, defered1);
            conductor.Items.Insert(500, defered2);

            var actualCanClose = await conductor.CanClose();

            Assert.True(actualCanClose);

            await defered1.TryClose();

            await defered2.TryClose();
        }
        [Fact] // See http://caliburnmicro.codeplex.com/discussions/430917
        public void TryCloseStressTest()
        {
            var conductor = new Conductor <IScreen> .Collection.OneActive();

            var conducted = Enumerable.Range(0, 10000)
                            .Select(i => new Screen {
                DisplayName = i.ToString(CultureInfo.InvariantCulture)
            });

            conductor.Items.AddRange(conducted);

            var defered1 = new DeferredCloseScreen {
                DisplayName = "d1", IsClosable = true
            };
            var defered2 = new DeferredCloseScreen {
                DisplayName = "d2", IsClosable = true
            };

            conductor.Items.Insert(0, defered1);
            conductor.Items.Insert(500, defered2);

            var finished = false;

            conductor.CanClose(canClose => {
                finished = true;
                Assert.True(canClose);
            });
            Assert.False(finished);

            defered1.TryClose();
            defered2.TryClose();
            Assert.True(finished);
        }
        [Fact] // See http://caliburnmicro.codeplex.com/discussions/430917
        public void TryCloseStressTest()
        {
            var conductor = new Conductor<IScreen>.Collection.OneActive();
            var conducted = Enumerable.Range(0, 10000)
                .Select(i => new Screen {DisplayName = i.ToString(CultureInfo.InvariantCulture)});
            conductor.Items.AddRange(conducted);

            var defered1 = new DeferredCloseScreen {DisplayName = "d1", IsClosable = true};
            var defered2 = new DeferredCloseScreen {DisplayName = "d2", IsClosable = true};
            conductor.Items.Insert(0, defered1);
            conductor.Items.Insert(500, defered2);

            var finished = false;
            conductor.CanClose(canClose => {
                finished = true;
                Assert.True(canClose);
            });
            Assert.False(finished);

            defered1.TryClose();
            defered2.TryClose();
            Assert.True(finished);
        }