/// <summary> /// Execute a search request that will fetch search results asynchronously. /// </summary> /// <param name="context">Search context used to track asynchronous request.</param> /// <param name="options">Options defining how the query will be performed</param> /// <returns>Asynchronous list of search items.</returns> public static ISearchList Request(SearchContext context, SearchFlags options = SearchFlags.None) { ISearchList results = null; if (!InternalEditorUtility.CurrentThreadIsMainThread()) { results = new ConcurrentSearchList(context); Dispatcher.Enqueue(() => { results.AddItems(GetItems(context, options)); (results as ConcurrentSearchList)?.GetItemsDone(); }); return(results); } if (options.HasAny(SearchFlags.Sorted)) { results = new SortedSearchList(context); } else { results = new AsyncSearchList(context); } results.AddItems(GetItems(context, options)); return(results); }
private void SetupContext() { m_Results?.Dispose(); m_ResultView?.Dispose(); if (m_SearchContext != null) { m_SearchContext.Dispose(); m_SearchContext.asyncItemReceived -= OnAsyncItemsReceived; } var providerIds = m_EnabledProviderIds.Count != 0 ? m_EnabledProviderIds : SearchService.GetActiveProviders().Select(p => p.id); m_SearchContext = SearchService.CreateContext(providerIds, m_TextProperty.stringValue, SearchSettings.GetContextOptions()); m_SearchContext.asyncItemReceived += OnAsyncItemsReceived; m_Results = new SortedSearchList(m_SearchContext); m_ResultView = new SearchResultView(m_Results); RefreshResults(); }