public Task Initialize(Func <Task <bool> > before = null, Func <Task> after = null) { ValidateConfiguration(); return(MakeStateTransition(ProviderState.Created, ProviderState.Initializing, ProviderState.Initialized, () => InitializeCore().ContinueWith( t => { _rawDataSource = CreateDataSource(t.Result); if (_rawDataSource != null) { _rawDataSourceObserver = _rawDataSource.Subscribe( data => _dataSourceProxySubject.OnNext(data), error => { _dataSourceProxySubject.OnError(error); Log.Error().Exception(error).Write(); _providerStateSubject.OnNext(ProviderState.Failed); }); } return t.Result; }, TaskContinuationOptions.OnlyOnRanToCompletion), before, after)); }