Параллельный производитель/потребитель для выполненных задач [закрыто]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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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