using System.Threading.Tasks;
using System.Reactive.Subjects;
public static async Task Main()
var source = new Subject<float>();
var handler = new SubjectHandler<float>(source);
handler.AsObservable().Subscribe(x => Logger.Write($"handler >>> {x}"));
public class SubjectHandler<T>
private readonly Subject<T> _source;
private readonly Subject<T> _subject = new Subject<T>();
public SubjectHandler(Subject<T> source)
public IObservable<T> AsObservable()
_source.Subscribe(OnSourceValueChanged);
private void OnSourceValueChanged(T value)
OnSourceValueChangedAsync(value).Forget();
private async Task OnSourceValueChangedAsync(T value)
public static class Logger
public static void Write<T>(T obj)
Console.WriteLine($"{DateTime.Now} : {obj}");
public static class TaskExtensions
public static void Forget(this Task task)
Logger.Write("Exception occured!!!");
Logger.Write(t.Exception);
}, TaskContinuationOptions.OnlyOnFaulted);