Технически, чтобы ответить на реальный вопрос, код должен использовать Task.Run
вместо StartNew
:
_ = Task.Run(() =>
Однако это феноменально плохая идея. Мало того, что он делает fire-and-Forgot , он будет использовать context.Response
в случайное время в будущем. И он начнет запись в поток ответов, а затем завершит поток до завершения записи. Он просто полностью сломан.
Я считаю более подходящим решением было бы просто полностью удалить заводские настройки / запустить / запустить и использовать await
, где это необходимо:
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
......
report.CreateDocument();
using (MemoryStream fs = new MemoryStream())
{
if (format == pdf)
report.ExportToPdf(fs);
else if (format == xlsx)
report.ExportToXlsx(fs);
else if (format == docx)
report.ExportToDocx(fs);
context.Response.Clear();
context.Response.Headers.Append("Content-Type", "application/" + format);
context.Response.Headers.Append("Content-Transfer-Encoding", "binary");
context.Response.Headers.Append("Content-Disposition", "attachment; filename=ExportedDocument." + format);
await context.Response.Body.WriteAsync(fs.ToArray(), 0, fs.ToArray().Length);
await context.Response.CompleteAsync();
}
}