mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-19 22:20:33 +01:00
One async call leads to another, and another, all the way up the call stack...
This commit is contained in:
parent
64887fa743
commit
937d27ae9d
@@ -248,5 +248,47 @@ namespace MediaBrowser.Controller
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
internal async Task ExecuteMetadataProviders(BaseEntity item, ItemResolveEventArgs args)
|
||||
{
|
||||
var supportedProviders = Kernel.Instance.MetadataProviders.Where(i => i.Supports(item));
|
||||
|
||||
// Start with non-internet providers. Run them sequentially
|
||||
foreach (BaseMetadataProvider provider in supportedProviders.Where(i => !i.RequiresInternet))
|
||||
{
|
||||
await provider.Fetch(item, args);
|
||||
}
|
||||
|
||||
var internetProviders = supportedProviders.Where(i => i.RequiresInternet);
|
||||
|
||||
if (internetProviders.Any())
|
||||
{
|
||||
// Now execute internet providers in parallel
|
||||
await Task.WhenAll(
|
||||
internetProviders.Select(i => i.Fetch(item, args))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void DisposeComposableParts()
|
||||
{
|
||||
base.DisposeComposableParts();
|
||||
|
||||
DisposeProviders();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Disposes all providers
|
||||
/// </summary>
|
||||
private void DisposeProviders()
|
||||
{
|
||||
if (MetadataProviders != null)
|
||||
{
|
||||
foreach (var provider in MetadataProviders)
|
||||
{
|
||||
provider.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user