2016-09-15 4 views
0

Ich habe eine C# -Web-Anwendung, die einen Web-Service-Aufruf macht, dann rendert eine Seite für einen Browser. Nach this advice wählte ich System.Net.WebClient für die Anfrage, weil es eine Succint-Schnittstelle und alle Kontrolle, die ich brauchte, hatte.System.Net.WebClient - sollte ich Async verwenden

WebClient bietet mir asynchrone Versionen aller Download-Methoden. Sollte ich sie benutzen? Es ist mir egal, ob der aktuelle Benutzer wartet. Ich brauche das Web-Service-Ergebnis, bevor ich die Seite rendern kann, und ich habe in der Zwischenzeit nichts anderes für sie zu tun. Allerdings ist es mir wirklich egal, ob mein Server gebunden ist, während der Web-Service-Aufruf eines Benutzers abgeschlossen ist. Wenn dies JavaScript wäre, würde eine synchrone Webanfrage auf dem Hauptthread mindestens das gesamte Fenster halten. Ist das der Fall in asp.net? Aus Gründen, die ich nicht kontrollieren kann, befindet sich meine Web-Service-Anfrage am Ende eines Stapels von 15 Methodenaufrufen. Dot muss ich sie alle in async konvertieren, um einen Vorteil zu sehen?

+0

Tl; Dr kommt es an – Liam

Antwort

0

Im Allgemeinen wird Async-IO keine schnellere Antwort pro Anfrage liefern, aber in der Theorie kann es den Durchsatz erhöhen.

public async Task<IActionResult> YourWebApiMethod() { 
    // at this point thread serving this request is returned back to threadpool and 
    // awailable to serve other requests 
    var result = await Call3ptyService(); 
    // once IO is finished we grab new thread from thread pool to finish the job 
    return result; 
} 

// thread serving this request is allocated for duration of whole operation 
public IActionResult YourWebApiMethod() { 
    return Call3ptyService().Result; 
} 

Sie haben nur so viele Threads im Thread-Pool, wenn jeder Einzelne damit beschäftigt ist, auf externe Dienste zu warten; Ihr Webserver wird aufhören, Anfragen zu bedienen. Was Ihr spezielles Problem angeht - versuchen Sie es und Sie werden es herausfinden.

+0

Ich begann zu verdächtigen. Ich hoffte, dass der WebClient schlau genug sein würde, Async zu machen, aber verstecke ihn vor mir: Parke meinen Stapel, lass den Thread los, wecke Dinge auf, wenn die Anfrage zurückkommt. Ich sehe jetzt, dass ich zu viel hoffe! – bbsimonbb

Verwandte Themen