//Instatiate A and call start

public class A
{
	private readonly C _c;

	public A()
	{
		_c = new C();
		var b = new B(new[] { _c });
		b.Subscribe(message =>
		{
			Console.WriteLine(message);

			if (message == "throw please!")
				throw new Exception();
		});
	}

	public void Start() => _c.Start();
}


public class B : IObservable<string>
{
	private readonly IObservable<string> _observable;

	public B(IEnumerable<IObservable<string>> observables)
	{
		_observable = observables.Merge();
	}

	public IDisposable Subscribe(IObserver<string> observer) => _observable.Subscribe(observer);
}

public class C : IObservable<string>
{
	private readonly Subject<string> _subject = new Subject<string>();

	public void Start()
	{
		_subject.OnNext("Hello");
		try
		{
		_subject.OnNext("throw please!");
		}
		catch(Exception ex)
		{
			// I'll catch it; I sometimes expect them to throw.
		}
		_subject.OnNext("World");
	}

	public IDisposable Subscribe(IObserver<string> observer) => _subject.Subscribe(observer);
}