diff options
Diffstat (limited to 'MediaBrowser.Providers/Manager/ProviderManager.cs')
| -rw-r--r-- | MediaBrowser.Providers/Manager/ProviderManager.cs | 40 |
1 files changed, 11 insertions, 29 deletions
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index 92ce0a036..ba4b624e3 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -863,8 +863,8 @@ namespace MediaBrowser.Providers.Manager private readonly ConcurrentQueue<Tuple<Guid, MetadataRefreshOptions>> _refreshQueue = new ConcurrentQueue<Tuple<Guid, MetadataRefreshOptions>>(); - private readonly object _refreshTimerLock = new object(); - private Timer _refreshTimer; + private readonly object _refreshQueueLock = new object(); + private bool _isProcessingRefreshQueue; public void QueueRefresh(Guid id, MetadataRefreshOptions options) { @@ -874,38 +874,18 @@ namespace MediaBrowser.Providers.Manager } _refreshQueue.Enqueue(new Tuple<Guid, MetadataRefreshOptions>(id, options)); - StartRefreshTimer(); - } - - private void StartRefreshTimer() - { - if (_disposed) - { - return; - } - - lock (_refreshTimerLock) - { - if (_refreshTimer == null) - { - _refreshTimer = new Timer(RefreshTimerCallback, null, 100, Timeout.Infinite); - } - } - } - private void StopRefreshTimer() - { - lock (_refreshTimerLock) + lock (_refreshQueueLock) { - if (_refreshTimer != null) + if (!_isProcessingRefreshQueue) { - _refreshTimer.Dispose(); - _refreshTimer = null; + _isProcessingRefreshQueue = true; + Task.Run(() => StartProcessingRefreshQueue()); } } } - private async void RefreshTimerCallback(object state) + private async Task StartProcessingRefreshQueue() { Tuple<Guid, MetadataRefreshOptions> refreshItem; var libraryManager = _libraryManagerFactory(); @@ -939,7 +919,10 @@ namespace MediaBrowser.Providers.Manager } } - StopRefreshTimer(); + lock (_refreshQueueLock) + { + _isProcessingRefreshQueue = false; + } } private async Task RefreshItem(BaseItem item, MetadataRefreshOptions options, CancellationToken cancellationToken) @@ -1018,7 +1001,6 @@ namespace MediaBrowser.Providers.Manager public void Dispose() { _disposed = true; - StopRefreshTimer(); } } }
\ No newline at end of file |
