/// <summary> /// Adding new source stream to run /// </summary> /// <param name="Source">any observable streams</param> public void Add <T>(UniRx.IObservable <T> Source) { lock (_gate) { if (_tail != null) { var newHead = new AsyncSubject <Unit>(); _tail .Subscribe(_ => { var streamToLink = Source .DoOnCompleted(() => { newHead.OnNext(Unit.Default); newHead.OnCompleted(); }).Subscribe(); _queHistory.Add(streamToLink); }); _tail = newHead; _queHistory.Add(_tail); } else { var head = new AsyncSubject <Unit>(); var initialStream = Source .DoOnCompleted(() => { head.OnNext(Unit.Default); head.OnCompleted(); }).Subscribe(); _queHistory.Add(initialStream); _tail = head; _queHistory.Add(_tail); } } }