protected override void Dispose(bool explicitDispose) { if (explicitDispose) { _runControl?.Dispose(); _postingCts?.Dispose(); var postingQueueSpinLock = _postingQueueSpinLock; if (postingQueueSpinLock != null) { postingQueueSpinLock.Invoke(() => _postingQueue.Fluent().NullCond(x => x.ToList())) .Fluent().NullCond(postingQueueCopy => postingQueueCopy.DisposeMany()); postingQueueSpinLock.Invoke(() => _postingQueue.Fluent().NullCond(x => x.Clear())); } var subscriptionsSpinLock = _subscriptionsSpinLock; if (subscriptionsSpinLock != null) { subscriptionsSpinLock.Invoke(() => _subscriptionsList.Fluent().NullCond(x => x.ToList())) .Fluent().NullCond(subscriptionsListCopy => subscriptionsListCopy.Where(i => (i.State & LocalSubscriptionStates.PublisherOwnsSubscription) == LocalSubscriptionStates.PublisherOwnsSubscription).DisposeMany()); subscriptionsSpinLock.Invoke(() => _subscriptionsList.Fluent().NullCond(x => x.Clear())); subscriptionsSpinLock.Invoke(() => _subscriptionsDictionary.Fluent().NullCond(x => x.Clear())); } _postingWorkers.DisposeAndClearArray(); } _postingQueue = null; _postingQueueSpinLock = null; _postingWorkers = null; _runningSettings = null; _subscriptionsDictionary = null; _subscriptionsList = null; _subscriptionsSpinLock = null; _runControl = null; _postingCts = null; // base.Dispose(explicitDispose); }
public LocalPublisher(ILocalPublisherSettings settings) { settings.EnsureNotNull(nameof(settings)).EnsureReadOnly().EnsureValid().EnsureNotDisabled(); // _runningSettings = settings; _subscriptionsSpinLock = new PrimitiveSpinLock(); _subscriptionsList = new List <ILocalSubscription>(); _subscriptionsDictionary = new Dictionary <ILocalSubscription, P_NewSubscriptionRegistrationState>(); _postingQueue = new Queue <LocalPostingQueueEntry>(); _postingQueueSpinLock = new PrimitiveSpinLock(); _postingCts = new CancellationTokenSource(); _postingWorkers = EnumerableUtilities .CreateSequence( factory: locIndex => new LocalPostingWorker(queue: _postingQueue, queueSpinLock: _postingQueueSpinLock, cancellationToken: _postingCts.Token), length: _runningSettings.PostingDop) .ToArray(); _runControl = new RunControl <LocalPublisher>(options: RunControlOptions.SingleStart, component: this, start: P_DoStartAsync, stop: P_DoStopAsync); }
public LocalPublisherSettings(ILocalPublisherSettings other, bool isReadOnly = false) : this(postingDop : other.EnsureNotNull(nameof(other)).Value.PostingDop, isReadOnly : isReadOnly) { }
public GenericLocalPublisher(ILocalPublisherSettings settings) : base(settings: settings) { }
public MessageFlowLocalPublisherSettingsOption(ILocalPublisherSettings settings) { settings.EnsureNotNull(nameof(settings)).EnsureReadOnly().EnsureNotDisabled().EnsureValid(); // _settings = settings; }