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); }
protected override void Dispose(bool explicitDispose) { if (explicitDispose) { _activateControl?.Dispose(); } _component = null; _activateControl = null; // base.Dispose(explicitDispose); }
// TODO: Put strings into the resources. // protected override async Task OnInitializeAsync(IContext ctx = default) { RunControl <ResetServant <TDescription> > activateControl = default; ITriggerXInstance resetTrigger = default; try { var componentDescription = Description.Component; var componentDisability = componentDescription.IsDisabled(); if (componentDisability) { this.LogDisabilityWarning(description: componentDescription); WriteDA( location: ref _activateControlFactory, value: (locOptions, locComponent, locAttemptState, locBeforeActivate, locActivate, locDeactivate, locDeactivateToken) => new RunControl <ResetServant <TDescription> >( options: locOptions, component: locComponent, attemptState: locAttemptState, beforeStart: locBeforeActivate, start: locState => P_DoActivateAsync(state: locState, continuation: locActivate, componentDisability: true), stop: () => P_DoDeactivateAsync(continuation: locDeactivate, componentDisability: true), stopToken: locDeactivateToken)); resetTrigger = null; } else { switch (Description.ResetFailureResponseCode) { case ResetServantResetFailureResponseCode.None: WriteDA(location: ref _resetFailureResponseDelegate, value: null); break; default: RequireComponentResetFailureResponseDelegate(dlg: out var failureResponseDlg); if (failureResponseDlg is null) { throw new EonException(message: $"Method '{nameof(RequireComponentResetFailureResponseDelegate)}' has returned invalid result '{failureResponseDlg.FmtStr().G()}'.{Environment.NewLine}\tComponent:{this.FmtStr().GNLI2()}"); } WriteDA(ref _resetFailureResponseDelegate, failureResponseDlg); break; } // WriteDA( location: ref _activateControlFactory, value: (locOptions, locComponent, locAttemptState, locBeforeActivate, locActivate, locDeactivate, locDeactivateToken) => new RunControl <ResetServant <TDescription> >( options: locOptions, component: locComponent, attemptState: locAttemptState, beforeStart: locBeforeActivate, start: locState => P_DoActivateAsync(state: locState, continuation: locActivate, componentDisability: false), stop: () => P_DoDeactivateAsync(continuation: locDeactivate, componentDisability: false), stopToken: locDeactivateToken)); if (!Description.ResetTrigger.IsDisabled) { resetTrigger = await this.CreateInitializeAppScopeInstanceAsync <ITriggerXInstance>(description : Description.ResetTrigger, ctx : ctx).ConfigureAwait(false); } else { resetTrigger = null; } } WriteDA(ref _resetTrigger, resetTrigger); // await base.OnInitializeAsync(ctx : ctx).ConfigureAwait(false); } catch (Exception exception) { resetTrigger?.Dispose(exception); activateControl?.Dispose(exception); throw; } }