private async Task SaveResultsHelper(SaveResultsRequestParams saveParams, RequestContext <SaveResultRequestResult> requestContext, IFileStreamFactory fileFactory) { // retrieve query for OwnerUri Query query; if (!ActiveQueries.TryGetValue(saveParams.OwnerUri, out query)) { await requestContext.SendError(SR.QueryServiceQueryInvalidOwnerUri); return; } //Setup the callback for completion of the save task ResultSet.SaveAsAsyncEventHandler successHandler = async parameters => { await requestContext.SendResult(new SaveResultRequestResult()); }; ResultSet.SaveAsFailureAsyncEventHandler errorHandler = async(parameters, reason) => { string message = SR.QueryServiceSaveAsFail(Path.GetFileName(parameters.FilePath), reason); await requestContext.SendError(message); }; try { // Launch the task query.SaveAs(saveParams, fileFactory, successHandler, errorHandler); } catch (Exception e) { await errorHandler(saveParams, e.Message); } }
/// <summary> /// Saves the requested results to a file format of the user's choice /// </summary> /// <param name="saveParams">Parameters for the save as request</param> /// <param name="fileFactory"> /// Factory for creating the reader/writer pair for the requested output format /// </param> /// <param name="successHandler">Delegate to call when the request completes successfully</param> /// <param name="failureHandler">Delegate to call if the request fails</param> public void SaveAs(SaveResultsRequestParams saveParams, IFileStreamFactory fileFactory, ResultSet.SaveAsAsyncEventHandler successHandler, ResultSet.SaveAsFailureAsyncEventHandler failureHandler) { // Sanity check to make sure that the batch is within bounds if (saveParams.BatchIndex < 0 || saveParams.BatchIndex >= Batches.Length) { throw new ArgumentOutOfRangeException(nameof(saveParams.BatchIndex), SR.QueryServiceSubsetBatchOutOfRange); } Batches[saveParams.BatchIndex].SaveAs(saveParams, fileFactory, successHandler, failureHandler); }
/// <summary> /// Saves a result to a file format selected by the user /// </summary> /// <param name="saveParams">Parameters for the save as request</param> /// <param name="fileFactory"> /// Factory for creating the reader/writer pair for outputing to the selected format /// </param> /// <param name="successHandler">Delegate to call when request successfully completes</param> /// <param name="failureHandler">Delegate to call if the request fails</param> public void SaveAs(SaveResultsRequestParams saveParams, IFileStreamFactory fileFactory, ResultSet.SaveAsAsyncEventHandler successHandler, ResultSet.SaveAsFailureAsyncEventHandler failureHandler) { // Get the result set to save ResultSet resultSet; lock (resultSets) { // Sanity check to make sure we have a valid result set if (saveParams.ResultSetIndex < 0 || saveParams.ResultSetIndex >= resultSets.Count) { throw new ArgumentOutOfRangeException(nameof(saveParams.BatchIndex), SR.QueryServiceSubsetResultSetOutOfRange); } resultSet = resultSets[saveParams.ResultSetIndex]; } resultSet.SaveAs(saveParams, fileFactory, successHandler, failureHandler); }