Bonjour,

je cherche un expert du C# qui pourrait répondre à des questions précises :

J'ai deux threads et un MemoryStream nommé _buffer et un Stream de sortie nommé outStream ou _outStream.

Un des threads remplie le MemoryStream :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 void _speaker_WroteOuputDataEvent(Stream outStream, VozEventStreamArgs args)
{
    byte[] buf = args.Data;
    //ZvLogManager.InfoFormat("writing {0} on the stream {1}", buf.Length, outStream);
    outStream.Write(buf, 0, buf.Length);
    _buffer.Write(buf, 0, buf.Length);
}
l'autre thread lit le MemoryStream et écrit dans outStream

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 public override void Start()
{
    int _chunckLen = 1000;
    int bytesRead;
    byte[] buf = new byte[_chunckLen];
    while ((bytesRead = _buffer.Read(buf, 0, _chunckLen)) != 0)
        _outStream.Write(buf, 0, bytesRead);
}
Je voudrais savoir ce que vous pensez de ce design ?

On est dans un cas Producteur/Consommateur. Le premier thread écrit dans le MemoryStream et le deuxième lit.

Dernière précision, il va y avoir un seul producteur et plusieurs consomateurs. Est-ce que je devrais utiliser la fonction BeginRead ou lieu de Read parce qu'on a des lectures et écriture en simultanée sur le même stream ?