using System;
using System.Threading.Tasks;
namespace Articulos.Cap04
{
public sealed class MetodoAsincronicoExcepciones
{
public static async void MetodoAsincronico()
{
Task<string> tarea = RetrasoAsincronico();
try
{
string resultado = await tarea;
Console.WriteLine ("Resultado: {0}", resultado);
}
catch (Exception e)
{
Console.WriteLine ("Mensaje de excepción: {0}", e.Message);
}
Console.WriteLine ("¿La tarea fue cancelada?: {0}", tarea.IsCanceled.ToString());
Console.WriteLine ("¿La tarea falló?: {0}", tarea.IsFaulted.ToString());
if (tarea.Exception != null)
{
Console.WriteLine ("Mensaje de excepción: {0}", tarea.Exception.Message);
Console.WriteLine ("Mensaje de excepción anidada: {0}", tarea.Exception.InnerException.Message);
}
}
public static async Task<string> RetrasoAsincronico()
{
await Task.Delay(100);
// Remueva los comentarios para demostrar
// el lanzamiento de excepciones en métodos
// asincrónicos:
// throw new OperationCanceledException ("Cancelado");
// throw new Exception ("Ocurrió un problema...");
return "Tarea completada";
}
public static void Main()
{
// Creación de una tarea con
// System.Threading.Task.Task:
Task tarea = new Task(MetodoAsincronico);
// Inicia la ejecución de la tarea:
tarea.Start();
// Espera a que la tarea se complete:
tarea.Wait();
Console.ReadLine();
}
}
}