plusieurs attend vs Tâche.WaitAll équivalent?

En termes de performances, ces 2 méthodes exécuter GetAllWidgets() et GetAllFoos() en parallèle?

Est-il une raison pour utiliser l'un plutôt que l'autre? Il semble y avoir beaucoup qui se passe derrière les coulisses avec le compilateur, donc je ne trouve pas ça clair.

============= MethodA: l'Utilisation de plusieurs attend ======================

public async Task<IHttpActionResult> MethodA()
{
    var customer = new Customer();

    customer.Widgets = await _widgetService.GetAllWidgets();
    customer.Foos = await _fooService.GetAllFoos();

    return Ok(customer);
}

=============== MethodB: À L'Aide De La Tâche.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);
}

=====================================

  • Dans ton premier exemple, les deux méthodes seront appelés séquentiellement et dans la seconde, ils vont être exécutés en parallèle, de sorte qu'ils ne sont pas équivalents. Aussi, dans votre deuxième méthode de blocage lors de l'exécution de ces tâches.
  • MethodA exécutera _fooService.GetAllFoos() uniquement lorsque _widgetService.GetAllWidgets() a fini, methodB va l'exécuter lorsque la Tâche inachevée de _fooService.GetAllFoos() retourne.
InformationsquelleAutor vidalsasoon | 2015-08-20