Ich habe ein Bedürfnis. Ich habe eine MVC5-Website. Ich verwende normale Contorller-Modellstruktur. Wo ich eine Controller-Funktion aus Javascript ausführe. Ich muss einige XML-Dateien verarbeiten, während sie hochgeladen werden. Was passiert, wenn der Controller die Funktion zum ersten Mal ausführt, kehrt er erst wieder zum Browser zurück, wenn alle XML-Dateien verarbeitet sind.MVC5 Wie verwende ich Async um eine progressive Aufgabe auszuführen?
Also hier ist was ich will. Ich möchte Controller-Funktion ausführen, um die Modellmethode auszuführen. In dieser Methode möchte ich alle XML-Dateien auswählen und dann asynchron verarbeiten. hier ist der Code:
var raw = new DirectoryInfo(xconfig.Directory.FullName + "//raw");
if (raw.Exists)
{
var xmls = raw.GetFiles("*.xml");
foreach (var xml in xmls)
{
if(ProcessedXmlFiles != null)
{
if(!ProcessedXmlFiles.Contains(xml.Name))
{
ExportData(xml);
ProcessedXmlFiles.Add(xml.Name);
}
}
}
}
Wenn der obige Code ausgeführt wird, ich einen anderen JavaScript-Methode aufrufen, um die Updates zu erhalten, wie viele Dateien verarbeitet wurden normale Ajax-Aufruf verwenden. Also rufe ich einfach eine andere Contrler-Methode auf, bei der ich die ProcessedXmlFiles.Count zurücksende, um zu wissen, wie viele von ihnen bisher verarbeitet wurden!
gut dieser Code ist gut in einem Modell und es gibt nichts zurück! – KMX
Nun, statt den Codeblock auszuführen, können Sie einfach das Innere von Task.Run durch 'myModel.ExecuteMethod()' ersetzen. Ob es etwas zurückgibt oder nicht, spielt keine Rolle. –
Ich habe meine Controller-Methode wie folgt aktualisiert. Wenn der Code "processgallery" ausführt, kommt jeder Aufruf dieser API-Methode erst, wenn dies abgeschlossen ist. öffentlichen async Aufgabe Api() { if (Model.Api == "processgallery") { erwarten Task.Run (() => { Model.UpdateGallery(); }); Rückgabewert null; } sonst CallApi(); } –
KMX