|
@@ -7,6 +7,7 @@ using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text.Json.Serialization;
|
|
|
using System.Threading;
|
|
|
+using System.Threading.Tasks;
|
|
|
using MediaBrowser.Controller.Entities;
|
|
|
using MediaBrowser.Model.Dto;
|
|
|
using MediaBrowser.Model.Session;
|
|
@@ -17,7 +18,7 @@ namespace MediaBrowser.Controller.Session
|
|
|
/// <summary>
|
|
|
/// Class SessionInfo.
|
|
|
/// </summary>
|
|
|
- public sealed class SessionInfo : IDisposable
|
|
|
+ public sealed class SessionInfo : IAsyncDisposable, IDisposable
|
|
|
{
|
|
|
// 1 second
|
|
|
private const long ProgressIncrement = 10000000;
|
|
@@ -380,10 +381,28 @@ namespace MediaBrowser.Controller.Session
|
|
|
{
|
|
|
if (controller is IDisposable disposable)
|
|
|
{
|
|
|
- _logger.LogDebug("Disposing session controller {0}", disposable.GetType().Name);
|
|
|
+ _logger.LogInformation("Disposing session controller synchronously {0}", disposable.GetType().Name);
|
|
|
disposable.Dispose();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public async ValueTask DisposeAsync()
|
|
|
+ {
|
|
|
+ _disposed = true;
|
|
|
+
|
|
|
+ StopAutomaticProgress();
|
|
|
+
|
|
|
+ var controllers = SessionControllers.ToList();
|
|
|
+
|
|
|
+ foreach (var controller in controllers)
|
|
|
+ {
|
|
|
+ if (controller is IAsyncDisposable disposableAsync)
|
|
|
+ {
|
|
|
+ _logger.LogInformation("Disposing session controller asynchronously {0}", disposableAsync.GetType().Name);
|
|
|
+ await disposableAsync.DisposeAsync().ConfigureAwait(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|