internal async Task RunSerializeContinueRequest(SerializeDataContinueRequestParams serializeParams, RequestContext <SerializeDataResult> requestContext) { try { // Verify we have sensible inputs and some data has already been sent for the file Validate.IsNotNull(nameof(serializeParams), serializeParams); Validate.IsNotNullOrWhitespaceString("FilePath", serializeParams.FilePath); DataSerializer serializer = null; if (!inProgressSerializations.TryGetValue(serializeParams.FilePath, out serializer)) { throw new Exception(SR.SerializationServiceRequestNotFound(serializeParams.FilePath)); } // Write to file and cleanup if needed Logger.Write(TraceEventType.Verbose, "HandleSerializeContinueRequest"); SerializeDataResult result = serializer.ProcessRequest(serializeParams); if (serializeParams.IsLastBatch) { // Cleanup the serializer this.inProgressSerializations.TryRemove(serializer.FilePath, out serializer); } await requestContext.SendResult(result); } catch (Exception ex) { await SendErrorAndCleanup(serializeParams.FilePath, requestContext, ex); } }
private async Task TestSerializeDataMultiRequestSuccess(Action<SerializeDataStartRequestParams> setStandardParams, Action<string> verify) { await this.RunFileSaveTest(async (filePath) => { // Given: // ... A simple data set that requires 3 messages var startParams = new SerializeDataStartRequestParams() { FilePath = filePath, Columns = DefaultColumns, Rows = new DbCellValue[][] { DefaultData[0] }, IsLastBatch = false }; setStandardParams(startParams); // When I send all 3 messages await SendAndVerifySerializeStartRequest(startParams); var continueParams = new SerializeDataContinueRequestParams() { FilePath = filePath, Rows = new DbCellValue[][] { DefaultData[1] }, IsLastBatch = false }; await SendAndVerifySerializeContinueRequest(continueParams); continueParams.Rows = new DbCellValue[][] { DefaultData[2] }; continueParams.IsLastBatch = true; await SendAndVerifySerializeContinueRequest(continueParams); // ... Then the file should look as expected verify(filePath); }); }
/// <summary> /// Process request to save a resultSet to a file in CSV format /// </summary> internal Task HandleSerializeContinueRequest(SerializeDataContinueRequestParams serializeParams, RequestContext <SerializeDataResult> requestContext) { // Run in separate thread so that message thread isn't held up by a potentially time consuming file write Task.Run(async() => { await RunSerializeContinueRequest(serializeParams, requestContext); }).ContinueWithOnFaulted(async t => await SendErrorAndCleanup(serializeParams?.FilePath, requestContext, t.Exception)); return(Task.CompletedTask); }
private async Task SendAndVerifySerializeContinueRequest(SerializeDataContinueRequestParams request1) { // When: I attempt to save this to a file var efv = new EventFlowValidator<SerializeDataResult>() .AddStandardResultValidator() .Complete(); await SerializationService.RunSerializeContinueRequest(request1, efv.Object); // Then: // ... There should not have been an error efv.Validate(); }