Ist die asynchrone Rekursion in C # (async ctp / .net 4.5) sicher?

In C # mit async ctp oder der Beta von vs.net 2011 können wir rekursiven Code wie folgt schreiben:

public async void AwaitSocket()
{
    var socket = await this.AcceptSocketAsync(); //await socket and >>return<< to caller
    AwaitSocket(); //recurse, note that the stack will never be deeper than 1 step since await returns..
    Handle(socket); // this will get called since "await" returns
}

In diesem speziellen Beispiel wartet der Code async auf einen TCP-Socket, und sobald er akzeptiert wurde, wird er wiederkehren und async auf einen anderen warten.

Dies scheint in Ordnung zu sein, da der Abschnitt await den Code an den Aufrufer zurückliefert und somit keinen Stapelüberlauf verursacht.

Also zwei Fragen hier:

Wenn wir die Tatsache ignorieren, dass es sich in diesem Beispiel um Sockets handelt. Ist es in Ordnung, auf diese Weise eine stapelfreie Rekursion durchzuführen? oder gibt es Nachteile, die ich vermisse?

Würde der obige Code aus IO-Sicht ausreichen, um alle eingehenden Anforderungen zu verarbeiten? Ich meine, indem ich nur auf einen warte und sobald er akzeptiert ist, fange ich an, auf einen anderen zu warten. Scheitern einige Anfragen daran?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage