-
-
Save jorgesanabria/71841644b53879c8343996f4f229c1fd to your computer and use it in GitHub Desktop.
parallel IAsyncEnumerable
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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