Код: Выделить всё
// C#
IAsyncEnumerable enumerable = this.dataSource.Read(query);
await foreach (var data in enumerable)
{
await this.consumer.Write(data);
}
< /code>
Моя проблема в том, что, пока я перечисляю базу данных, я держу блокировку на данные. Я не хочу держать этот замок дольше, чем мне нужно. С готовно прочитать из дата данных, просто не вызывая толист Я думаю, что будет какой-то способ использовать очередь или каналу, похожую на канал, чтобы выступить в качестве буфера между производителем и потребителем. < /p>
Код: Выделить всё
// go
queue := make(chan MyData, BUFFER_SIZE)
go dataSource.Read(query, queue)
// Read sends data on the channel, closes it when done
for data := range queue {
consumer.Write(data)
}
Подробнее здесь: https://stackoverflow.com/questions/741 ... r-scenario
Мобильная версия