Skip to content

Instantly share code, notes, and snippets.

@jorgesanabria
Created May 3, 2021 14:30
Show Gist options
  • Save jorgesanabria/71841644b53879c8343996f4f229c1fd to your computer and use it in GitHub Desktop.
Save jorgesanabria/71841644b53879c8343996f4f229c1fd to your computer and use it in GitHub Desktop.
parallel IAsyncEnumerable
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
namespace PruebaAsyncEnumerable
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var results = Enumerable.Range(0, 10).Select(x => RunTask()).ToArray();
async Task caller()
{
var tareas = new List<Task<Status>>();
foreach (var item in results)
{
tareas.Add(CallAsync(item));
}
await Task.WhenAll(tareas);
}
caller().Wait();
Console.ReadKey();
}
public enum Status
{
Success,
Running,
Error
};
static async Task<Status> CallAsync(IAsyncEnumerable<Status> statuses)
{
Status lastStatus = Status.Running;
await foreach (var iter in statuses)
{
lastStatus = iter;
Console.WriteLine(iter);
}
return lastStatus;
}
static async IAsyncEnumerable<Status> RunTask()
{
using var http = new HttpClient();
yield return Status.Running;
await Task.Delay(5000);
yield return Status.Running;
await Task.Delay(5000);
yield return Status.Running;
await Task.Delay(5000);
yield return Status.Running;
await Task.Delay(5000);
yield return Status.Success;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment