/// <inheritdoc/> public virtual async Task <SearchResultStream> ExportSearchResultsAsync(string search, SearchExportArgs args = null) { var arguments = new Argument[] { new Argument("search", search) } .AsEnumerable(); if (args != null) { arguments = arguments.Concat(args); } var response = await this.Context.GetAsync(this.Namespace, SearchJobsExport, arguments).ConfigureAwait(false); try { await response.EnsureStatusCodeAsync(HttpStatusCode.OK).ConfigureAwait(false); return(await SearchResultStream.CreateAsync(response).ConfigureAwait(false)); // Transfers response ownership } catch { response.Dispose(); throw; } }
/// <summary> /// Asynchronously creates a new <see cref="SearchResultStream"/> /// using the specified <see cref="Response"/>. /// </summary> /// <param name="response"> /// An object from which search results are read. /// </param> /// <returns> /// A <see cref="SearchResultStream"/> object. /// </returns> public static async Task <SearchResultStream> CreateAsync(Response response) { XmlReader reader = response.XmlReader; await reader.MoveToDocumentElementAsync("results", "response").ConfigureAwait(false); if (reader.Name == "response") { await response.ThrowRequestExceptionAsync().ConfigureAwait(false); } var stream = new SearchResultStream(response); return(stream); }
async Task<SearchResultStream> GetSearchResultsAsync(DispatchState dispatchState, string endpoint, IEnumerable<Argument> args) { await this.TransitionAsync(dispatchState).ConfigureAwait(false); var resourceName = new ResourceName(this.ResourceName, endpoint); var response = await this.Context.GetAsync(this.Namespace, resourceName, args).ConfigureAwait(false); try { var searchResults = await SearchResultStream.CreateAsync(response).ConfigureAwait(false); return searchResults; } catch { response.Dispose(); throw; } }
/// <inheritdoc/> public virtual async Task <SearchResultStream> SearchOneShotAsync(string search, int count = 0, JobArgs args = null, CustomJobArgs customArgs = null) { var resourceName = JobCollection.ClassResourceName; var arguments = new SearchArgs { Search = search, Count = count, ExecutionMode = ExecutionMode.OneShot } .AsEnumerable(); if (args != null) { arguments = arguments.Concat(args.Where(arg => arg.Name != "exec_mode")); } if (customArgs != null) { arguments = arguments.Concat(customArgs); } Response response = await this.Context.PostAsync(this.Namespace, resourceName, arguments).ConfigureAwait(false); try { await response.EnsureStatusCodeAsync(HttpStatusCode.OK).ConfigureAwait(false); var stream = await SearchResultStream.CreateAsync(response).ConfigureAwait(false); // Transfers response ownership return(stream); } catch { response.Dispose(); throw; } }