In Bezug auf die Leistung, werden diese 2 Methoden GetAllWidgets()
und GetAllFoos()
parallel laufen lassen?mehrere erwartet vs Task.WaitAll - gleichwertig?
Gibt es einen Grund, einen über den anderen zu verwenden? Es scheint eine Menge hinter den Kulissen mit dem Compiler zu geschehen, daher finde ich es nicht klar.
============= MethodA: Verwenden mehrerer erwartet ======================
public async Task<IHttpActionResult> MethodA()
{
var customer = new Customer();
customer.Widgets = await _widgetService.GetAllWidgets();
customer.Foos = await _fooService.GetAllFoos();
return Ok(customer);
}
=============== MethodB: Mit Task.WaitAll =====================
public async Task<IHttpActionResult> MethodB()
{
var customer = new Customer();
var getAllWidgetsTask = _widgetService.GetAllWidgets();
var getAllFoosTask = _fooService.GetAllFos();
Task.WaitAll(new List[] {getAllWidgetsTask, getAllFoosTask});
customer.Widgets = getAllWidgetsTask.Result;
customer.Foos = getAllFoosTask.Result;
return Ok(customer);
}
=================================
In Ihrem ersten Beispiel werden die beiden Methoden nacheinander aufgerufen und in der zweiten werden sie parallel ausgeführt, also sind sie nicht gleichwertig. Außerdem blockieren Sie bei der zweiten Methode die Ausführung der Aufgaben. –
MethodeA führt '_fooService.GetAllFoos()' nur dann aus, wenn '_widgetService.GetAllWidgets()' beendet ist, führt methodB das aus, wenn der nicht abgeschlossene Task von '_fooService.GetAllFoos()' zurückkommt. –