Wenn ich meine asynchrone Methode mit dem folgenden Inhalt abbricht, indem ich die Cancel()
Methode meiner CancellationTokenSource
aufruft, wird es schließlich aufhören. Da jedoch die Zeile Console.WriteLine(await reader.ReadLineAsync());
ziemlich lange dauert, habe ich versucht, auch mein CancellationToken an ReadLineAsync()
zu übergeben (in der Erwartung, dass es eine leere Zeichenfolge zurückgibt), damit die Methode besser auf meinen Cancel()
-Aufruf reagiert. Allerdings konnte ich keine CancellationToken
an ReadLineAsync()
übergeben.Kann ich StreamReader.ReadLineAsync mit einem CancellationToken abbrechen?
Kann ich einen Anruf zu Console.WriteLine()
oder Streamreader.ReadLineAsync()
abbrechen und wenn ja, wie mache ich das?
Warum akzeptiert ReadLineAsync()
keine CancellationToken
? Ich hielt es für eine gute Methode, den Async-Methoden einen optionalen Parameter CancellationToken
zu geben, auch wenn die Methode nach dem Abbrechen noch abgeschlossen ist.
StreamReader reader = new StreamReader(dataStream);
while (!reader.EndOfStream)
{
if (ct.IsCancellationRequested){
ct.ThrowIfCancellationRequested();
break;
}
else
{
Console.WriteLine(await reader.ReadLineAsync());
}
}
aktualisiert Wie unten in den Kommentaren erwähnt, allein der Console.WriteLine()
Aufruf wurde bereits einige Sekunden aufgrund eines schlecht formated Eingabestring von 40.000 Zeichen pro Zeile einnimmt. Das Auflösen löst meine Probleme mit der Antwortzeit, aber ich bin immer noch an irgendwelchen Vorschlägen oder Problemumgehungen interessiert, wie man diese lang andauernde Anweisung abbrechen kann, wenn aus irgendeinem Grund 40.000 Zeichen in eine Zeile geschrieben werden sollen (zum Beispiel wenn man die ganze Zeichenkette in eine Datei).
Sie versuchen, das falsche Problem zu lösen. Sie haben ein überaus benutzerfreundliches Programm geschrieben, es ist verrückt scrollen Text über den Bildschirm mit einer Rate weit höher, als der Benutzer jemals lesen kann. Jetzt suchen Sie nach der Lösung "Stoppt diesen Unsinn". Natürlich sind Sie, Ihr Benutzer würde auch. Aber das ist nicht die wirkliche Lösung, die richtige wird es nie von vorn anfangen. Schreiben Sie es in eine Datei, zeigen Sie es mit dem Editor an. Alles ist besser. –
'Sie versuchen, das falsche Problem zu lösen. 'Danke, dass Sie so klar sind - Sie haben absolut Recht. –