Warum blockiert Console.In.ReadLineAsync?

8

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.

    
NoPyGod 06.02.2013, 08:28
quelle

2 Antworten

5

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.

    
NoPyGod 12.02.2013, 21:12
quelle
3

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.

>
    
Adam Kingsley 30.08.2017 18:55
quelle

Tags und Links