Wie funktionieren asynchrone Methoden in C #?

In einigen meiner Projekte verwende ich asynchrone Methoden, und ich mag es, da meine Anwendung dadurch viel skalierbarer wird. Ich frage mich jedoch, wie asynchrone Methoden im Hintergrund wirklich funktionieren. Woher weiß .NET (oder Windows?), Dass ein Anruf abgeschlossen ist? Abhängig von der Anzahl der von mir getätigten asynchronen Anrufe kann ich sehen, dass neue Threads erstellt werden (allerdings nicht immer…). Warum?

Außerdem möchte ich überwachen, wie lange es dauert, eine Anfrage zu bearbeiten. Um das Konzept zu testen, habe ich den folgenden Code geschrieben, der asynchron einen Webdienst aufruft und unmittelbar danach eine Stoppuhr startet.

for (int i = 0; i < 10000; i++)
{
    myWebService.BeginMyMethod(new MyRequest(), result, new AsyncCallback(callback), i);
    stopWatches[i].Start();
}
// Call back stop the stopwatch after calling EndMyMethod

Dies funktioniert nicht, da alle Anforderungen (10000) dieselbe Anfangszeit haben und die Dauer linear ansteigt (Anruf 0 = Dauer 1, Anruf 1 = Dauer 2 usw.). Wie kann ich die tatsächliche Dauer eines Aufrufs mit einer asynchronen Methode überwachen (vom Moment der tatsächlichen Ausführung der Anforderung bis zum Ende)?

AKTUALISIEREN: Blockiert eine asynchrone Methode den Fluss? Ich verstehe, dass es das .NET verwendetThreadPool aber wie einIAsyncResult wissen, dass ein Anruf abgeschlossen ist und es Zeit ist, die anzurufenCallBack Methode?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage