示例#1
0
        /// <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;
        }