2017-09-28 4 views
1

ich zur Zeit für ein Projekt untersuche, ob es einen Unterschied in der Leistung Bedeutung der folgenden Methoden ist:Web.API 2 - Asynchrone Ausführung von Anfragen

[HttpGet] 
    public async Task<IHttpActionResult> Test1() 
    { 
     await Task.Delay(TimeSpan.FromSeconds(10)); 
     return Ok(); 
    } 

und

[HttpGet] 
    public IHttpActionResult Test2() 
    { 
     Thread.Sleep(TimeSpan.FromSeconds(10)); 
     return Ok(); 
    } 

in meinem Verständnis die ersten Methode Test1 wird asynchron ausgeführt, dh das Ergebnis von task.delay wird abgewartet und der aktuelle Thread kann von einer anderen Anfrage wiederverwendet werden.

Die zweite Methode Test2 wird synchron ausgeführt und der Thread wird für 10 Sekunden blockiert. Trotzdem wird das OK-Ergebnis asynchron ausgeführt, da mein Rückgabetyp IHttpActionResult ist.

Meine Fragen sind:

  1. Gibt es ein Vorteil eines IHttpActionResult vs einer Aufgabe < IHttpActionResult zurückzukehren>?
  2. Ich testete beide Methoden auf meinem lokalen Rechner mit wcat Performance-Tool mit 2 Clients mit 40 virtuellen Clients und beide Methoden führten zu ähnlichen Ergebnissen. Ich habe erwartet, dass ich mit der ersten Methode mehr Anfragen ausführen kann als mit der zweiten. Also ist entweder mein Setup dieses Tests falsch oder ich habe die Auswirkungen der asynchronen/synchronen Ausführung falsch verstanden?

Wir freuen uns auf Ihre Antworten!

+0

die erste Methode erwartet in einem anderen Thread. der zweite blockiert den aktuellen Thread. Wie auch immer, eine bessere Nutzung wäre warten Task.Delay (10) anstelle von Thread.Sleep (10) die zweite, die Sie Ressourcen verschwenden, indem ein Thread blockiert nichts zu tun, der erste gibt den aufrufenden Thread und wird fortgesetzt Arbeit an einem anderen Punkt, ist wie Versprechen in Javascript, wenn Sie erwarten, machen Sie ein Versprechen, dass Sie schließlich etwas oder eine Ausnahme zurückgeben werden – rmjoia

+0

Ich finde dieses Buch sehr gut, da es sehr klein und nuklear ist [Async in C# 5.0] (http : //shop.oreilly.com/product/0636920026532.do) – rmjoia

Antwort

0

Sie würden nur den Vorteil sehen, die Async-Methode auszuführen, wenn Sie Ihre Site unter Last setzen können - d. H. Eine anständige Anzahl von Anfragen zur gleichen Zeit ausführen. Läuft einfach jedes Mal, wenn Sie keinen Unterschied sehen.

Async-Code läuft nicht schneller; Dadurch kann das System seinen Threadpool verwalten und die Parallelität verbessern, d. h. die verfügbaren Threads können effizienter genutzt werden.

Siehe Stephen Cleary Erklärung:

Async and Await

Verwandte Themen