Bonjour à tous,
Des mes applications, j'utilise un mécanisme perso de Traces.
J'ai créé une classe Traces qui contient, pour la partie concernant ce sujet, surtout deux méthodes:
La méthode Public Open qui contient la création d'un StreamWeriter TraceStream
TraceStream = New StreamWriter(_TraceFile, False, New UTF8Encoding(True))
La méthode Write
1 2 3 4 5 6
| Public Async Sub Write(Info As String)
If TraceStream IsNot Nothing Then
Await TraceStream.WriteLineAsync(Info)
TraceStream.Flush()
End If
End Sub |
Dans l'appli, l'instance de la classe Traces est TRC. J'appelle donc TRC.Open en début d'appli pour créer le flux d'écriture et TRC.Write à chaque fois que je veux tracer quelque chose.
La question porte sur le Flush :
Si je l'enlève, l'appli plante sur le WriteLnAsync après une dizaine d'appel à TRC.Write avec "Le flux est actuellement utilisé par une opération précédente réalisée sur celui-ci.". Je comprends que le buffer est plein et qu'il faut le vider sur disque.
Si je le remplace par
Await TraceStream.FlushAsync()
l'appli plante au même endroit dès le second appel à TRC.Write avec la même erreur.
Quelqu'un pourrait il m'expliquer pourquoi je suis obligé d'avoir un Flush Synchrone après l'écriture Asynchrone ?
Merci d'avance.
Partager