Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Threading.Tasks;
- namespace Articulos.Cap04
- {
- public sealed class UsoAsyncAwait
- {
- public static void Main()
- {
- // Creación de una tarea con
- // System.Threading.Task.Task:
- Task tarea = new Task(ProcesoDatosAsync);
- // Inicia la ejecución de la tarea:
- tarea.Start();
- // Espera a que la tarea se complete:
- tarea.Wait();
- Console.ReadLine();
- }
- // Este método se encarga de de procesaro datos de un archivo
- // de manera asincrónica:
- public static async void ProcesoDatosAsync()
- {
- // Crea una tarea para la el control
- // asincrónico del archivo pasado como argumento:
- Task<int> tarea = ProcesamientoArchivoAsync("C:\\shared\\archivogrande.txt");
- // La invocación asincrónica de `ProcesamientoArchivoAsync`
- // no bloque la ejecución de las siguientes líneas de
- // código, como esta:
- Console.WriteLine ("\nEspere mientras el procesamiento del archivo se completa.\n");
- // En este punto sí esperamos a que `ProcesamientoArchivoAsync`
- // se termine de ejecutar:
- int x = await tarea;
- Console.WriteLine ("Valor computado finalizado `ProcesamientoArchivoAsync`: {0}", x.ToString());
- }
- // Se encarga de procesar el archivo de texto:
- static async Task<int> ProcesamientoArchivoAsync(string archivo)
- {
- // Indicador de que el método `ProcesamientoArchivoAsync`
- // ya ha iniciado a ejecutarse:
- Console.WriteLine ("\n`ProcesamientoArchivoAsync ya ha iniciado...");
- int contador = 0;
- using (StreamReader sr = new StreamReader(archivo))
- {
- // Invocamos el método asincrónico `ReadToEndAsync` de
- // `StreamReader`, el cual nos devuelve el contenido del
- // archivo de texto especificado en el constructor de `StreamReader`:
- string textoArchivo = await sr.ReadToEndAsync();
- // Finalizada la ejecución de `ReadToEndAsync`, obtenemos la
- // longitud de la cadena de caracteres:
- contador += textoArchivo.Length;
- // Proceso demo que puede tardar mucho tiempo en completarse:
- for (int i = 0; i < 10000; i++)
- {
- int x = textoArchivo.GetHashCode();
- if (x == 0)
- {
- contador--;
- }
- }
- }
- Console.WriteLine ("Salida del método `ProcesamientoArchivoAsync`.");
- return contador;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement