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); }
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); }