public async ValueTask DisposeAsync() { _disposed = true; StopAutomaticProgress(); var controllers = SessionControllers.ToList(); foreach (var controller in controllers) { if (controller is IAsyncDisposable disposableAsync) { _logger.LogDebug("Disposing session controller asynchronously {TypeName}", disposableAsync.GetType().Name); await disposableAsync.DisposeAsync().ConfigureAwait(false); } } }
/// <inheritdoc /> public void Dispose() { _disposed = true; StopAutomaticProgress(); var controllers = SessionControllers.ToList(); SessionControllers = Array.Empty <ISessionController>(); foreach (var controller in controllers) { if (controller is IDisposable disposable) { _logger.LogDebug("Disposing session controller {0}", disposable.GetType().Name); disposable.Dispose(); } } }
public Tuple <ISessionController, bool> EnsureController <T>(Func <SessionInfo, ISessionController> factory) { var controllers = SessionControllers.ToList(); foreach (var controller in controllers) { if (controller is T) { return(new Tuple <ISessionController, bool>(controller, false)); } } var newController = factory(this); controllers.Add(newController); SessionControllers = controllers.ToArray(); return(new Tuple <ISessionController, bool>(newController, true)); }
public Tuple <ISessionController, bool> EnsureController <T>(Func <SessionInfo, ISessionController> factory) { var controllers = SessionControllers.ToList(); foreach (var controller in controllers) { if (controller is T) { return(new Tuple <ISessionController, bool>(controller, false)); } } var newController = factory(this); _logger.LogDebug("Creating new {0}", newController.GetType().Name); controllers.Add(newController); SessionControllers = controllers.ToArray(); return(new Tuple <ISessionController, bool>(newController, true)); }