Запись асинхронного потока в потоке - PullRequest
0 голосов
/ 10 мая 2010

У меня есть поток, в котором я пишу в 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 голосов
/ 10 мая 2010

Вы можете использовать асинхронные методы Stream, такие как BeginWrite . Вы можете проверить IAsyncResult , возвращенный, чтобы определить, когда запись закончилась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...