コード例 #1
0
ファイル: Subscriber.cs プロジェクト: geteventcore/eventcore
        public async Task SubscribeAsync(CancellationToken cancellationToken)
        {
            if (_isSubscribing)
            {
                throw new InvalidOperationException("Already subscribing.");
            }

            _isSubscribing = true;

            var tasks = new List <Task>();

            // One subscription listener for each region.
            foreach (var subStreamId in _options.SubscriptionStreamIds)
            {
                tasks.Add(_subscriptionListener.ListenAsync(subStreamId.RegionId, subStreamId.StreamId, cancellationToken));
            }

            tasks.Add(_resolutionManager.ManageAsync(cancellationToken));
            tasks.Add(_sortingManager.ManageAsync(cancellationToken));
            tasks.Add(_handlingManager.ManageAsync(cancellationToken));

            tasks.Add(cancellationToken.WaitHandle.AsTask());

            await Task.WhenAny(tasks);

            _isSubscribing = false;
        }