Quando annullo il mio metodo asincrono con il seguente contenuto chiamando il metodo Cancel()
del mio CancellationTokenSource
, si fermerà alla fine. Tuttavia, poiché la riga Console.WriteLine(await reader.ReadLineAsync());
richiede un bel po 'di tempo per completare, ho provato a passare il mio CancellationToken a ReadLineAsync()
(aspettandomi di restituire una stringa vuota) per rendere il metodo più reattivo alla mia chiamata Cancel()
. Tuttavia non ho potuto passare un CancellationToken
a ReadLineAsync()
.Posso annullare StreamReader.ReadLineAsync con un CancellationToken?
Posso annullare una chiamata a Console.WriteLine()
o Streamreader.ReadLineAsync()
e, in caso affermativo, come faccio?
Perché ReadLineAsync()
non si accetta uno CancellationToken
? Ho pensato che fosse una buona pratica dare ai metodi Async un parametro opzionale CancellationToken
anche se il metodo dovesse ancora essere completato dopo essere stato cancellato.
StreamReader reader = new StreamReader(dataStream);
while (!reader.EndOfStream)
{
if (ct.IsCancellationRequested){
ct.ThrowIfCancellationRequested();
break;
}
else
{
Console.WriteLine(await reader.ReadLineAsync());
}
}
Aggiornamento Come dichiarato nei commenti qui sotto, la chiamata Console.WriteLine()
da solo era già riprendendo alcuni secondi a causa di una stringa di input mal formattati di 40.000 caratteri per riga. Rompere questo down risolve i miei problemi relativi al tempo di risposta, ma sono comunque interessato a qualsiasi suggerimento o soluzione alternativa su come cancellare questa dichiarazione di lunga durata se per qualche ragione si scrivono 40.000 caratteri in una riga (ad esempio quando si riversa l'intera stringa in un file).
Si sta cercando di risolvere il problema sbagliato. Hai scritto un programma estremamente ostile all'utente, è un testo che scorre pazzamente sullo schermo ad un ritmo molto più alto di quanto l'utente possa mai leggere. Ora stai cercando la soluzione "ferma questo non-senso". Certo che lo sei, anche il tuo utente lo farebbe. Ma questa non è la vera soluzione, quella giusta non è mai iniziata in primo luogo. Scriverlo in un file, visualizzarlo con Blocco note. Qualunque cosa è meglio –
'Stai cercando di risolvere il problema sbagliato. Grazie per essere chiaro, hai assolutamente ragione. –