Request
Executes a search request that will fetch search results asynchronously.
Read time 5 minutesLast updated 10 days ago
Definition
- Type: Method
- Namespace: UnityEditor.Search
- Assembly: UnityEditor
Request(SearchContext, SearchFlags)
Executes a search request that will fetch search results asynchronously.
public static ISearchList Request(SearchContext context, SearchFlags options = SearchFlags.None)
Parameters
Search context used to track asynchronous requests. You need to dispose of the context yourself.
Options defining how the query is performed.
Returns
Type | Description |
|---|---|
| ISearchList | Asynchronous list of search items. |
Remarks
The following example executes a query and print results over many frames using EditorApplication.update.
[MenuItem("Examples/SearchService/Request List")]public static void RequestList(){ ISearchList results = SearchService.Request("*.cs"); // It is important to note that when you request some search results, // that you need to enumerate them asynchronously using the returned search list. AsyncResultEnumerator.Fetch(results, item => Debug.Log(item));}class AsyncResultEnumerator{ private Action<SearchItem> m_OnEnumerate; private IEnumerator<SearchItem> m_Iterator; public static AsyncResultEnumerator Fetch(ISearchList results, Action<SearchItem> onEnumerate) { return new AsyncResultEnumerator(results, onEnumerate); } public AsyncResultEnumerator(ISearchList results, Action<SearchItem> onEnumerate) { m_OnEnumerate = onEnumerate; m_Iterator = results.GetEnumerator(); EditorApplication.update += EnumerateResults; } private void EnumerateResults() { if (m_Iterator == null || !m_Iterator.MoveNext()) { m_Iterator = null; EditorApplication.update -= EnumerateResults; } else if (m_Iterator.Current != null) m_OnEnumerate(m_Iterator.Current); }}
If you are running a coroutine you can yield results like the following:
public static IEnumerable<SearchItem> YieldResults(){ ISearchList results = SearchService.Request("*.cs"); foreach (var result in results) yield return result;}
Request(string, SearchFlags)
Executes a search request that will fetch search results asynchronously.
public static ISearchList Request(string searchText, SearchFlags options = SearchFlags.None)
Parameters
Search query to be executed.
Options defining how the query is performed.
Returns
Type | Description |
|---|---|
| ISearchList | Asynchronous list of search items. |
Remarks
The following example executes a query and print results over many frames using EditorApplication.update.
[MenuItem("Examples/SearchService/Request List")]public static void RequestList(){ ISearchList results = SearchService.Request("*.cs"); // It is important to note that when you request some search results, // that you need to enumerate them asynchronously using the returned search list. AsyncResultEnumerator.Fetch(results, item => Debug.Log(item));}class AsyncResultEnumerator{ private Action<SearchItem> m_OnEnumerate; private IEnumerator<SearchItem> m_Iterator; public static AsyncResultEnumerator Fetch(ISearchList results, Action<SearchItem> onEnumerate) { return new AsyncResultEnumerator(results, onEnumerate); } public AsyncResultEnumerator(ISearchList results, Action<SearchItem> onEnumerate) { m_OnEnumerate = onEnumerate; m_Iterator = results.GetEnumerator(); EditorApplication.update += EnumerateResults; } private void EnumerateResults() { if (m_Iterator == null || !m_Iterator.MoveNext()) { m_Iterator = null; EditorApplication.update -= EnumerateResults; } else if (m_Iterator.Current != null) m_OnEnumerate(m_Iterator.Current); }}
If you are running a coroutine you can yield results like the following:
public static IEnumerable<SearchItem> YieldResults(){ ISearchList results = SearchService.Request("*.cs"); foreach (var result in results) yield return result;}
Request(string, Action<SearchContext, IList<SearchItem>>, SearchFlags)
Executes a search request and calls back the specified function when all results are available.
public static void Request(string searchText, Action<SearchContext, IList<SearchItem>> onSearchCompleted, SearchFlags options = SearchFlags.None)
Parameters
Callback invoked when the search request is completed and all results are available.
Examples
[MenuItem("Examples/SearchService/Request All")]public static void RequestAll(){ SearchService.Request("t:texture", (SearchContext context, IList<SearchItem> items) => { Debug.Log("All Textures"); foreach (var item in items) Debug.Log(item); }, SearchFlags.Debug);}
Request(string, Action<SearchContext, IEnumerable<SearchItem>>, Action<SearchContext>, SearchFlags)
Executes a search request and callbacks for every batch of incoming results. It is possible to get duplicate items, so filter the final list if needed.
public static void Request(string searchText, Action<SearchContext, IEnumerable<SearchItem>> onIncomingItems, Action<SearchContext> onSearchCompleted, SearchFlags options = SearchFlags.None)
Parameters
Callback invoked everytime a batch of results are found and available.
Callback invoked when the search request is completed.
Examples
[MenuItem("Examples/SearchService/Request Async")]public static void RequestAsync(){ var batchCount = 0; var totalItemCount = 0; void OnIncomingResults(SearchContext context, IEnumerable<SearchItem> items) { var batchItemCount = items.Count(); totalItemCount += batchItemCount; Debug.Log($"#{++batchCount} Incoming materials ({batchItemCount}): {string.Join("\n", items)}"); } void OnSearchCompleted(SearchContext context) { Debug.Log($"Query <b>\"{context.searchText}\"</b> completed with a total of {totalItemCount}"); } SearchService.Request("t:material", OnIncomingResults, OnSearchCompleted, SearchFlags.Debug);}
Request(SearchContext, Action<SearchContext, IList<SearchItem>>, SearchFlags)
Executes a search request and calls back the specified function when all results are available.
public static void Request(SearchContext context, Action<SearchContext, IList<SearchItem>> onSearchCompleted, SearchFlags options = SearchFlags.None)
Parameters
Callback invoked when the search request is completed and all results are available.
Examples
[MenuItem("Examples/SearchService/Request All")]public static void RequestAll(){ SearchService.Request("t:texture", (SearchContext context, IList<SearchItem> items) => { Debug.Log("All Textures"); foreach (var item in items) Debug.Log(item); }, SearchFlags.Debug);}
Request(SearchContext, Action<SearchContext, IEnumerable<SearchItem>>, Action<SearchContext>, SearchFlags)
Executes a search request and callbacks for every batch of incoming results. It is possible to get duplicate items, so filter the final list if needed.
public static void Request(SearchContext context, Action<SearchContext, IEnumerable<SearchItem>> onIncomingItems, Action<SearchContext> onSearchCompleted, SearchFlags options = SearchFlags.None)
Parameters
Callback invoked everytime a batch of results are found and available.
Callback invoked when the search request is completed.
Examples
[MenuItem("Examples/SearchService/Request Async")]public static void RequestAsync(){ var batchCount = 0; var totalItemCount = 0; void OnIncomingResults(SearchContext context, IEnumerable<SearchItem> items) { var batchItemCount = items.Count(); totalItemCount += batchItemCount; Debug.Log($"#{++batchCount} Incoming materials ({batchItemCount}): {string.Join("\n", items)}"); } void OnSearchCompleted(SearchContext context) { Debug.Log($"Query <b>\"{context.searchText}\"</b> completed with a total of {totalItemCount}"); } SearchService.Request("t:material", OnIncomingResults, OnSearchCompleted, SearchFlags.Debug);}