异步流写入线程

问题描述:

我有一个线程在其中写入2个流。问题是线程被阻塞,直到第一个线程完成写入(直到所有数据都在管道的另一端传输),我不想这样做。有没有办法让它异步? chunkOutput是一个填充了来自多个线程的数据的字典,因此对现有密钥的检查速度越快,管道写入的速度越快。异步流写入线程

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

不是答案,但为什么你把Thread.Sleep(10)放在那个代码中? – driis 2010-05-10 17:00:20

+0

那么,为了不使空的循环CPU使用率高 – blez 2010-05-10 17:09:08

您可以使用流的异步方法,例如BeginWrite。您可以检查返回的IAsyncResult以检测写入何时完成。

+0

如果它没有完成,直到下一个循环?我想将字节发送到管道并继续使用我的代码 – blez 2010-05-10 17:20:22