Possiedo un'azione del controller MVC che deve eseguire diverse richieste Web. Quindi, in un tentativo di liberare questo thread per gestire altre richieste in arrivo web ho scritto qualcosa di simile: (NOTA: questa è una semplificazione del codice reale)Does Task.Factory.StartNew aiuta o danneggia 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);
}
La mia domanda è ho ho fatto le cose meglio o peggio girando una nuova discussione per fare questo lavoro. La mia intenzione è quella di liberare questo thread .Net per gestire altre richieste in entrata mentre vengono fatte le richieste di rete. Ma dopo averlo guardato sembra che sto ancora facendo un blocco di thread .Net, solo forse uno diverso dal pool di thread invece dell'originale, quindi non sto davvero meglio. Quindi il mio sospetto è corretto e il codice sopra riportato peggiora le cose?
Il vantaggio di Task.Factory.StartNew() se ha funzionato ... è che semplifica il lavoro all'interno da dover fare tutto asincrono. La mia domanda è: fa in questo modo in effetti liberare un thread per gestire le richieste web in arrivo o sta ancora legando lo stesso numero di thread dal pool di thread?
Grazie, ha senso che avresti bisogno di blocchi di basso livello per la creazione di veri metodi asincroni che non userebbero un thread .net. – user3766657