예제 #1
0
        public async Task T05_Concurrency()
        {
            const int numberOfTasks         = 37;
            const int numberOfValues        = 7;
            var       intervalBetweenValues = TimeSpan.FromMilliseconds(2);
            var       intervalBetweenTasks  = TimeSpan.FromMilliseconds(3);

            var source = AutoObservable.Create <string>(count: numberOfValues, delay: intervalBetweenValues)
                         .ToCacheSource(x => x);

            source.Connect();

            var tasks = new List <Task <IList <string> > >();

            for (var i = 0; i < numberOfTasks; i++)
            {
                await Task.Delay(intervalBetweenTasks);

                tasks.Add(source.ToList().ToTask());
            }
            var ok = true;

            foreach (var task in tasks)
            {
                var result = await task.ConfigureAwait(false);

                if (result.Count != numberOfValues)
                {
                    ok = false;
                }
                Write($"{(result.Count == numberOfValues ? "Ok" : "FAILURE")} {result.Count}");
            }
            Assert.True(ok);
        }
예제 #2
0
        public async Task T02_Dispose_Connection()
        {
            var observable = AutoObservable.Create <string>(int.MaxValue, TimeSpan.FromMilliseconds(10))
                             .ToCacheSource(x => x);
            var mre = new ManualResetEventSlim();

            observable.Subscribe(x => mre.Set());

            observable.Connect();
            mre.Wait();

            observable.Connect().Dispose();
            mre.Reset();
            await Task.Delay(100);

            Assert.False(mre.IsSet);
        }