aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Library
diff options
context:
space:
mode:
authorShadowghost <Ghost_of_Stone@web.de>2026-05-16 09:50:33 +0200
committerShadowghost <Ghost_of_Stone@web.de>2026-05-16 09:50:33 +0200
commitd71194aa8cb07d998c0ed15df964c7c1259e7f17 (patch)
treed7ce1e97ab2f8ba5205725e97a3511f0c536bf2f /Emby.Server.Implementations/Library
parent9e794e80c29f51264b98594488ed714de5537921 (diff)
Parallelize internal and external calls
Diffstat (limited to 'Emby.Server.Implementations/Library')
-rw-r--r--Emby.Server.Implementations/Library/Search/SearchManager.cs25
1 files changed, 20 insertions, 5 deletions
diff --git a/Emby.Server.Implementations/Library/Search/SearchManager.cs b/Emby.Server.Implementations/Library/Search/SearchManager.cs
index 39fff42d9b..ff14a1db3a 100644
--- a/Emby.Server.Implementations/Library/Search/SearchManager.cs
+++ b/Emby.Server.Implementations/Library/Search/SearchManager.cs
@@ -84,12 +84,27 @@ public class SearchManager : ISearchManager
var searchTerm = query.SearchTerm.Trim().RemoveDiacritics();
- var results = await CollectFromProvidersAsync(_externalProviders, query, searchTerm, cancellationToken).ConfigureAwait(false);
- var fromExternal = results.Count > 0;
- if (results.Count == 0 && _internalProviders.Length > 0)
+ var externalTask = CollectFromProvidersAsync(_externalProviders, query, searchTerm, cancellationToken);
+ var internalTask = _internalProviders.Length > 0
+ ? CollectFromProvidersAsync(_internalProviders, query, searchTerm, cancellationToken)
+ : Task.FromResult<IReadOnlyList<SearchResult>>([]);
+
+ await Task.WhenAll(externalTask, internalTask).ConfigureAwait(false);
+
+ var externalResults = await externalTask.ConfigureAwait(false);
+ var fromExternal = externalResults.Count > 0;
+ IReadOnlyList<SearchResult> results;
+ if (fromExternal)
{
- _logger.LogDebug("No results from external providers, falling back to internal providers");
- results = await CollectFromProvidersAsync(_internalProviders, query, searchTerm, cancellationToken).ConfigureAwait(false);
+ results = externalResults;
+ }
+ else
+ {
+ results = await internalTask.ConfigureAwait(false);
+ if (_internalProviders.Length > 0)
+ {
+ _logger.LogDebug("No results from external providers, using internal provider results");
+ }
}
// Internal providers apply user-access filtering inline in their queries. External