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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
TraceStream = New StreamWriter(_TraceFile, False, New UTF8Encoding(True))
La méthode Write
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.