在线程中写入异步流

时间:2010-05-10 16:55:53

标签: c# multithreading stream

我有一个线程,我写入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 个答案:

答案 0 :(得分:0)

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