Ich beschloss, die Methode zu konvertieren, die eine PDF zu asynchronen Aufruf generiert. Der asynchrone Aufruf erzeugt nicht die gewünschte PDF und ich habe keine Ahnung, warum dies geschiehtAsynchrone Async erwarten Methode zum Generieren von PDF
Der Kunde, der die Asynchron-Betrieb nennt, ist wie folgt:
public QuotationResponse CreateQuotation(IQuotation quotation)
{
...
// Create Quotation PDF
_pdfWriter.GeneratePdfAsync(response);
return response;
}
Die Klasse verantwortlich für die PDF-Erzeugung ist die folgende:
public class Writer
{
//... other class methods
public async Task GeneratePdfAsync(QuotationResponse response)
{
await new Task(() =>
{
var currentPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
var formFile = Path.Combine(currentPath, Settings.Default.QUOTATION_TEMPLATE_PATH);
var newFile = Path.Combine(currentPath, Settings.Default.QUOTATION_PDF_PATH);
var reader = new PdfReader(formFile);
using (PdfStamper stamper = new PdfStamper(reader, new FileStream(newFile, FileMode.Create)))
{
....
// flatten form fields and close document
stamper.FormFlattening = true;
stamper.Close();
}
});
}
}
ich vermute, dass ich nicht etwas richtig mit dem async tun - warten Betrieb aber nicht wissen, was. Könnten Sie bitte helfen?
Code Ihrer PDF-Generierung scheint nicht asynchron zu sein. Sie erhalten keinen Wert, wenn Sie eine neue Aufgabe erstellen. Nachdem Sie dies gesagt haben, ist Ihr direktes Problem, dass Sie 'Task.Run (..' anstelle von 'neue Aufgabe (...' –
@ScottChamberlain nicht wirklich verwenden sollte es ungültig sein. Die gesamte PDF-Generierung findet innerhalb der GeneratePdfAsync-Methode statt – Nostradamus
Ich habe zuerst nicht bemerkt, dass GeneratePdfAsync im zweiten Codebeispiel definiert wurde. Um hinzuzufügen, was Yacoub sagte, sollten Sie nie 'ne neue Aufgabe machen (...' auch, Sie warten nie auf die von GeneratePdfAsync zurückgegebene Aufgabe. –