Lucio Flores
2022-07-20T05:17:05Z

EjemploTaskAysnc.cs

| using System.Diagnostics;
| using System.Net;
|
| namespace Crehana.DotNetAsincrono
| {
| internal class Program
| {
| //variables para almacenar html de las páginas a descargar
| static string htmlGoogle = new string("");
| static string htmlCrehana = new string("");
| //cronometro para ver cuanto se tardan en cargar las páginas
| static Stopwatch watch = new Stopwatch();
|
| static Task Main(string[] args)
| {
| //iniciamos el cronómetro
| watch.Start();
|
| //iniciamos ambas tareas asíncronas pero sin esperar el resultado de cada una
| _ = LoadGoogleAsync();
| _ = LoadCrehanaAsync();
|
| //Métodos síncronos que se ejecutan en orden, por lo tanto el ciclo while no
| //se ejecutará ya que llegando a ese punto el html ya estará almacenado en las variables
| //descomenta estas líneas y comenta las que están arriba
|
| //LoadGoogle();
| //LoadCrehana();
|
| //para evitar que el programa termine la ejecución antes de que termine la carga
| //le decimos que mientras que las cadenas de texto esten vacias
| //continue la ejecución del programa
| while (htmlGoogle.Length == 0 || htmlCrehana.Length == 0)
| {
| Console.WriteLine("Leyendo página de Google y página de Crehana...");
| }
|
| //se detiene el cronómetro
| watch.Stop();
|
| //se muestra cuanto tiempo transcurrió desde que se iniciaron las tareas
| Console.WriteLine($"Transcurrieron {watch.ElapsedMilliseconds} milisegundos");
|
| //muestra contenido de los htmls
| Console.WriteLine($"Html de Google: {htmlGoogle.Substring(0, 100)}...");
| Console.WriteLine($"Html de Crehana: {htmlCrehana.Substring(0, 100)}...");
|
| //se retorna un Task Completado para finalizar el programa.
| return Task.CompletedTask;
| }
|
| static async Task LoadGoogleAsync()
| {
| var client = new HttpClient();
| var response = await client.GetAsync("http://google.com");
| htmlGoogle = await response.Content.ReadAsStringAsync();
| }
|
| static async Task LoadCrehanaAsync()
| {
| var client = new HttpClient();
| var response = await client.GetAsync("https://www.crehana.com/mx/");
| htmlCrehana = await response.Content.ReadAsStringAsync();
| }
|
| //Tarea sincrona
| static Task LoadGoogle()
| {
| var client = new HttpClient();
| //Cómo la tarea es sincrona se debe esperar por el resultado de la operación.
| var response = client.GetAsync("http://google.com").Result;
| htmlGoogle = response.Content.ReadAsStringAsync().Result;
| return Task.CompletedTask;
| }
|
| //Tarea sincrona
| static Task LoadCrehana()
| {
| var client = new HttpClient();
| var response = client.GetAsync("https://www.crehana.com/mx/").Result;
| htmlCrehana = response.Content.ReadAsStringAsync().Result;
| return Task.CompletedTask;
| }
| }
| }