Параллельный производитель/потребитель для выполненных задач [закрыто]C#

Место общения программистов C#
Anonymous
Параллельный производитель/потребитель для выполненных задач [закрыто]

Сообщение Anonymous »

Как реализовать следующую функциональность MyCollection:
  • Задачи добавляются (одновременно) в коллекцию
  • Коллекция предоставляет IAsyncEnumerable, который возвращает завершенные задачи (в порядке выполнения также можно использовать одновременно)
Сценарий использования — это, например, параллельная загрузка нескольких файлов с последующей постобработкой.
var collection = new MyCollection();

var p1 = Task.Run(() =>
{
collection.Add(Task.Run(async () =>
{
await Task.Delay(3000);
return "Producer1-1";
}));

collection.Add(Task.Run(async () =>
{
await Task.Delay(2000);
return "Producer1-2";
}));
});

var p2 = Task.Run(() =>
{
collection.Add(Task.Run(async () =>
{
await Task.Delay(1000);
return "Producer2-1";
}));
});

Task.WhenAll(p1, p2).ContinueWith(_ => collection.CompleteAdding());

string[] expectedOrder = ["Producer2-1", "Producer1-2", "Producer1-1"];
var actualOrder = await collection.GetConsumingEnumerable().ToListAsync();

Assert.Equal(expectedOrder, actualOrder);


Подробнее здесь: https://stackoverflow.com/questions/789 ... eted-tasks

Вернуться в «C#»