Ich habe eine MVC-Controller-Aktion, die mehrere Webanforderungen stellen muss. So in einem Versuch, diesen Thread zu befreien anderen eingehenden Web-Anfragen zu behandeln, schrieb ich etwas wie folgt aus: (HINWEIS: dies eine starke Vereinfachung des realen Code)Hilft Task.Factory.StartNew in ASP.Net MVC?
public async Task<ViewResult> Index()
{
MyObj o = await Task.Factory.StartNew<MyObj>(() =>
{
WebClient c = new WebClient();
var res1 = c.DownloadString("...");
var res2 = c.DownloadString("..."); //Not shown but res1 required for this call.
return new MyObj(res1, res2);
}
return View(o);
}
Meine Frage I haben Dinge gemacht besser oder schlechter, indem du einen neuen Thread drehst, um diese Arbeit zu erledigen. Meine Absicht ist, diesen .Net-Thread zu befreien, um andere eingehende Anfragen zu behandeln, während die Netzwerkanfragen gemacht werden. Aber nach dem Anschauen scheint mir, dass ich immer noch einen .Net-Thread-Block mache, nur vielleicht einen anderen als den Thread-Pool anstelle des Originals, also geht es mir wirklich nicht besser. Also ist mein Verdacht richtig und der obige Code macht die Dinge schlimmer?
Der Vorteil von Task.Factory.StartNew(), wenn es funktionierte ... ist, dass es die Arbeit darin vereinfacht, dass alles asynchron gemacht werden muss. Meine Frage ist jedoch: Wird auf diese Weise tatsächlich ein Thread für die Verarbeitung eingehender Webanfragen freigegeben oder bindet er immer noch dieselbe Anzahl von Threads aus dem Threadpool?
Vielen Dank, es macht Sinn, dass Sie Bausteine auf niedriger Ebene benötigen, um echte asynchrone Methoden zu erstellen, die keinen .net-Thread verwenden. – user3766657