private async Task <Result <IEnumerable <FileContentResult> > > GetCoverResult(CoverInputData data) { return(await await Task.Factory.StartNew(async() => { try { return await GetCoverSampleResult(data); } catch (ThreadAbortException e) { return new Result <IEnumerable <FileContentResult> >(e.Message); } catch (OperationCanceledException e) { return new Result <IEnumerable <FileContentResult> >(e.Message); } catch (Exception e) { return new Result <IEnumerable <FileContentResult> >(e.Message); } finally { await Task.Run(() => { GC.Collect(); GC.WaitForPendingFinalizers(); GC.WaitForFullGCApproach(); GC.WaitForFullGCComplete(); }); } }, data.Token, TaskCreationOptions.RunContinuationsAsynchronously, TaskScheduler.Default)); }
public async Task <Result <IEnumerable <FileContentResult> > > GetCoverSampleResult(CoverInputData data) { var method = _groupingManager.Value.GetGroupingMethods().FirstOrDefault(x => x.MethodName.Equals(data.MethodName)); if (method is null) { return(new Result <IEnumerable <FileContentResult> >(NieOdnalezionoPodanejMetodyGrupujacej)); } var progressBarModel = new ProgressBarModel(); var step = string.IsNullOrEmpty(data.Step) ? 0 : Convert.ToDouble(data.Step); var waitRun = Task.Run(() => { while (!data.Token.IsCancellationRequested) { } data.Token.ThrowIfCancellationRequested(); }, data.Token); var result = await _coverMatrixManager.Value.GetMatrix(data.InputData, data.DataLow, data.DataHigh, method, data.GroupParameter, step, progressBarModel, waitRun); if (data.Token.IsCancellationRequested) { data.Token.ThrowIfCancellationRequested(); } var dataTxt = $"{DateTime.Now.ToFileTimeUtc()}DataMatrixTxt.txt"; var testTxt = $"{DateTime.Now.ToFileTimeUtc()}TestTxt.txt"; var dataMatrixStream = _txtExporter.Value.GetTxtStream(result.Value.CoverResult.DataMatrix.DataTable); var testMatrixStream = _txtExporter.Value.GetTxtStream(result.Value.CoverResult.TestMatrix.DataTable); var excelName = $"{result.Value.FileName.Replace(" ", "").Replace(".", "").Replace('-', '_').ToUpper()}_SLOW_{result.Value.SLOW}_SHIGH_{result.Value.SHIGH}_STEP_{result.Value.STEP}_METHOD_{result.Value.SelecteMethod.Replace(' ', '_').ToUpper().Replace('Ó', 'O').Replace('Ś', 'S').Replace('Ć', 'C')}_PARAM_{result.Value.SelecteMethodParam}_GRADE_{result.Value.CoverResult.Grade}.xlsx"; var excelStream = _excelWriter.Value.ExportToStream( result.Value, result.Value.CoverResult.DataMatrix.DataTable, result.Value.CoverResult.TestMatrix.DataTable); if (excelStream.HasErrors()) { return(new Result <IEnumerable <FileContentResult> >(excelStream.Error)); } progressBarModel.Progress = 100; var array = new[] { new FileContentResult(testMatrixStream, "application/txt") { FileDownloadName = testTxt }, new FileContentResult(dataMatrixStream, "application/txt") { FileDownloadName = dataTxt }, new FileContentResult(excelStream.Value, "application/xlsx") { FileDownloadName = excelName } }; return(new Result <IEnumerable <FileContentResult> >(array)); }