/// <summary> /// Initializes the stream processor. /// </summary> /// <returns>A <see cref="Task" />that represents the asynchronous operation.</returns> public async Task Initialize() { _cancellationToken.ThrowIfCancellationRequested(); if (_initialized) { throw new StreamProcessorAlreadyInitialized(_identifier); } var tryGetStreamProcessorState = await _streamProcessorStates.TryGetFor(_identifier, _cancellationToken).ConfigureAwait(false); if (!tryGetStreamProcessorState.Success) { tryGetStreamProcessorState = StreamProcessorState.New; await _streamProcessorStates.Persist(_identifier, tryGetStreamProcessorState.Result, _cancellationToken).ConfigureAwait(false); } _streamProcessor = new ScopedStreamProcessor( _identifier.ConsumerTenantId, _identifier, tryGetStreamProcessorState.Result as StreamProcessorState, _eventProcessor, _streamProcessorStates, _eventsFetcher, _eventsFetcherPolicy, _loggerManager.CreateLogger <ScopedStreamProcessor>()); _initialized = true; }