2017-02-10 4 views
0

Ich habe nie zuvor eine asynchrone Methode in meinem Leben programmiert. Ich habe gerade gelesen die folgende Website: https://msdn.microsoft.com/en-us/library/mt674882.aspxRückansicht während Prozessdaten

Aber es ist für mich nicht ganz klar ...

Ich möchte ein functie eine Ansicht zurückzukehren, während der Datenverarbeitung. Ohne dass der Benutzer auf die zu verarbeitenden Daten warten muss, bevor die Ansicht geladen wird. So geben Sie die Ansicht zurück und bearbeiten Sie die Daten im Hintergrund ....

Ist also der folgende Pseudocode mit Async-Programmierung möglich?

public async actionresult page(object obj) 
    { 
     SQLUploadToDatabase(obj); 

     string x = DoOtherWork(); 

     return View(x); 
    } 



Public void SQLUploadToDatabase(object obj) 
{ 
     conn = SQL.openconnection; 
     conn.inserttotable(obj); 
} 
+0

Dies hängt nicht mit async/await zusammen. Auch ist es wahrscheinlich keine gute Übung, es sei denn, Sie interessieren sich nicht für das Ergebnis (dh was passiert, wenn Ihre Aussage fehlschlägt oder wenn der iis App-Pool neu gestartet wird). Es gibt viele SO q/a's über das Auslagern von lang laufenden Prozessen auf asp.net/mvc, ich schlage vor, dass Sie danach suchen. – Igor

+1

Ja, nein, das ist nicht was asynchrone Controller-Methoden tun. Sie müssten einen Hintergrundprozess starten, der den Upload durchführt und sofort etwas an den Client zurückgibt. Tonnen von verschiedenen Möglichkeiten, Ihre Hintergrundprozesse auszuführen. Es wird ein Problem, den Benutzer über das Ergebnis zu informieren. Viele Möglichkeiten, dies auch zu erreichen. Viele. Viele. – Will

+0

Beim Lesen von Nachrichten oben denke ich, dass ich nach der falschen Kombination von Wörtern gesucht habe. Ich werde sehen, was ich finde, wenn ich "lang laufenden Prozesse auslagern" als Suchschlüssel verwende. Danke für deine Antworten. – DutchFlow

Antwort

0

Es scheint, dass Sie nach Feuer und vergessen Ansatz suchen. Wenn Sie nicht über Hintergrundjob erfolgreich oder fehlgeschlagen ist es egal, können Sie einfach verwenden -

public ActionResult Page(object obj) 
{ 
    Task.Run(() => SQLUploadToDatabase(obj)); 

    string x = DoOtherWork(); 

    return View(x); 
} 

Wenn Sie wissen wollen, ob es Erfolg ist oder nicht, möchten Sie Hintergrund-Scheduler wie HangFire oder Quartz.NET verwenden. Sie können mehr unter How to run Background Tasks in ASP.NET lesen.

+0

Danke, das habe ich gesucht! Ich habe bereits eine Möglichkeit entwickelt, den Status zu überprüfen, indem ich einen Wert in einem anderen Prozess überprüfe. Daher ist es mir egal, ob in diesem Code ein Fehler oder ein Erfolg vorliegt. Ich bin überrascht, wie einfach Ihr Pseudocode aussieht. Ich werde das so schnell wie möglich versuchen. – DutchFlow

+0

Beachten Sie, dass 'Task.Run' einen Thread aus dem ASP.net-Threadpool abruft. Wenn also genug davon ausgeführt wird, können Sie Anfragen verhungern. Wenn das ein Problem sein könnte, hättest du mehr Glück mit der alten Schule 'Thread'. –

Verwandte Themen