异步流写入线程
问题描述:
我有一个线程在其中写入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);
}
}
答
您可以使用流的异步方法,例如BeginWrite。您可以检查返回的IAsyncResult以检测写入何时完成。
+0
如果它没有完成,直到下一个循环?我想将字节发送到管道并继续使用我的代码 – blez 2010-05-10 17:20:22
不是答案,但为什么你把Thread.Sleep(10)放在那个代码中? – driis 2010-05-10 17:00:20
那么,为了不使空的循环CPU使用率高 – blez 2010-05-10 17:09:08