using System.Threading.Tasks;
public SomeObject(int id, string message)
public int Id {get; set;}
public string Message {get; set;}
public string Status {get; set;}
public class ResultExample
public static async Task Main()
var someObject = new SomeObject(1, "My message");
var task = HandleMessage(someObject);
if (antecedent.Status == TaskStatus.RanToCompletion)
Console.WriteLine("Calling 'SendResponse'");
await SendResponse(antecedent.Result);
else if (antecedent.Status == TaskStatus.Faulted)
Console.WriteLine("Logging error");
Console.WriteLine(antecedent.Exception.GetBaseException().Message);
public static async Task<SomeObject> HandleMessage(SomeObject someObject)
return await Task<SomeObject>.Run(() =>
SomeObject processedObject = new SomeObject();
DateTime date = DateTime.Now;
bool result = date.Hour < 10
Console.WriteLine("Processing message");
processedObject = someObject;
processedObject.Status = "Processed";
Console.WriteLine("Exception handling message");
throw new Exception("Error: failed to process message");
public static async Task<bool> SendResponse(SomeObject someObject)
return await Task.Run(() =>
Console.WriteLine("Sending response");
Console.WriteLine($"Data: {someObject.Status}");