2010-05-10 3 views
0

J'ai un fil dans lequel j'écris à 2 flux. Le problème est que le thread est bloqué jusqu'à ce que le premier finisse d'écrire (jusqu'à ce que toutes les données soient transférées de l'autre côté de la pipe), et je ne le veux pas. Y a-t-il un moyen de le rendre asynchrone? chunkOutput est un dictionnaire rempli de données provenant de plusieurs threads, donc plus la vérification des clés existantes est rapide, plus le tuyau écrira rapidement.Flux asynchrone écrit dans un fil

void ConsumerMethod(object totalChunks) { 
    while(true) { 
     if (chunkOutput.ContainsKey(curChunk)) { 
      if (outputStream != null && chunkOutput[curChunk].Length > 0) { 
       outputStream.Write(chunkOutput[curChunk]); // <-- here it stops 
      } 

      ChunkDownloader.AppendData("outfile.dat", 
        chunkOutput[curChunk], chunkOutput[curChunk].Length); 

      curChunk++; 
      if (curChunk >= (int) totalChunks) return; 
     } 

     Thread.Sleep(10); 
    }    
} 
+1

Pas une réponse, mais pourquoi mettez-vous Thread.Sleep (10) dans ce code ?? – driis

+0

Eh bien, de ne pas faire une utilisation élevée de cpu avec des boucles vides – blez

Répondre

0

Vous pouvez utiliser les méthodes Async de flux, comme BeginWrite. Vous pouvez vérifier le IAsyncResult retourné pour détecter lorsque l'écriture est terminée.

+0

Et si ce n'est pas fini, jusqu'à la prochaine boucle? Je veux envoyer les octets à la pipe et continuer avec mon code – blez

Questions connexes