2016-05-09 9 views
0

Ich bin neu in async so entschuldige ich mich im Voraus, wenn die Antwort offensichtlich ist. Wenn ich in MVC eine Aufgabe ausführen möchte, die keinen Einfluss auf die zurückgegebenen Daten hat (z. B. Analysen), kann async void hilfreich sein, oder würden Sie nur einen komplett anderen Thread auslösen. Wenn ich richtig verstehe, async zu verwenden, würde void für diesen Fall nicht helfen, weil wir das Ergebnis immer noch nicht zurückgeben werden (obwohl die tatsächliche Aktion nicht async markiert ist), bis alle Aufgaben beendet sind.Verwenden von async in MVC für Aktionen

Ist es möglich, async zu verwenden, um hier Parallelität zuzulassen, ohne Multithreading zu erzwingen?

+0

Anstatt den Job in der asp.net-Website auszuführen, möchten Sie es möglicherweise auf einem anderen Dienst ausführen –

+0

'async' ist nur marginal mit Multithreading verwandt. Sie sollten Stephen Cleary's Blog zu diesem Thema lesen. Aber ich verstehe nicht, was Sie mit "keinen Einfluss auf die Daten" meinen ... – Aron

+0

Ich muss analytische Daten an einen Web-Service senden, ist mir egal, wenn es passiert und sein Ergebnis sollte die Antwort auf den Client nicht beeinflussen . –

Antwort

3

Mit Async kann der Thread nur in den Pool zurückgegeben werden, wenn er in einen Wartezustand versetzt wird. Dies tritt im Allgemeinen bei E/A-Vorgängen auf, entweder lokal (Lesen/Schreiben von Dateien im Dateisystem) oder remote (z. B. eine Webanforderung an eine API oder eine Datenbankabfrage). Wie Sie richtig erkannt haben, hat es nichts mit Multiprocessing oder Hintergrundverarbeitung zu tun, die beide völlig getrennte Konzepte sind.

So weit wie neue Threads laichen, geht, das ist eigentlich extrem gefährlich im Zusammenhang mit einer Webanwendung. Keine Webanwendung sollte jemals manuell Threads erzeugen. Es würde Ihnen jedoch nicht helfen, da der Thread immer noch im Kontext der Anforderungs-Pipeline ausgeführt werden muss, sodass Sie nichts im Hintergrund tun würden.

Wenn Sie wirklich einige Aufgaben im Hintergrund und außerhalb des Anfrage-Antwort-Zyklus bewältigen müssen, dann müssen Sie ein Werkzeug für diesen Zweck verwenden. Ein paar gute zu sehen sind Revalee und Hangfire.

Verwandte Themen