Starten Sie eine neue Konsolenanwendung mit dem folgenden Code -
%Vor%Console.In.ReadLineAsync blockiert und kehrt erst zurück, wenn eine Zeile in der Konsole eingegeben wurde. So wird "Hi" niemals in die Konsole geschrieben.
Die Verwendung von awa auf Console.In.ReadLineAsync blockiert ebenfalls.
Ich habe verstanden, dass die neuen Async-CTP-Methoden nicht blockieren.
Was ist der Grund dafür?
Hier ist ein anderes Beispiel
%Vor%Dies verhält sich wie erwartet, es geht direkt zur nächsten Zeile und gibt "hi" aus, da Task.Delay nicht blockiert.
Daryal hat die Antwort hier gegeben Ссылка
Es scheint, dass ReadLineAsync nicht wirklich tut, was es tun soll. Bug im Framework.
Meine Lösung besteht darin, ThreadPool.QueueUserWorkItem in einer Schleife zu verwenden, sodass jeder Aufruf von ReadLineAsync für einen neuen Thread ausgeführt wird.
Dies kann jetzt in der Dokumentation
Leseoperationen für den Standard-Eingabestream werden synchron ausgeführt. Das heißt, sie blockieren, bis die angegebene Leseoperation abgeschlossen ist. Dies gilt auch für eine asynchrone Methode, z. B. ReadLineAsync , wird auf dem TextReader aufgerufen Objekt, das von der -Eigenschaft zurückgegeben wird.
>
Tags und Links c# async-await