Wednesday, February 06, 2013

Task-based Asynchronous Pattern - WaitAsync

Recently I was asked about a specific scenario when some code was being converted into using TAP and this was code that already used tasks. Since the existing code used the "IsFaulted" property a lot I came up with this little extension method making it easy to see if a task failed or not using the await keyword but without adding a lot of exception handling.

 1: public static Task<bool> WaitAsync(this Task task)
 2: {
 3:     var tcs = new TaskCompletionSource<bool>();
 4:     task.ContinueWith(
 5:         t => tcs.TrySetResult(!(t.IsFaulted || t.IsCanceled)));
 6:     return tcs.Task;
 7: }

or

public static Task<bool> WaitAsync(this Task task)
{
      return task.ContinueWith(
                       t => !(t.IsFaulted || t.IsCanceled),
                      TaskContinuationOptions.ExecuteSynchronously);
}

Read more: Being Cellfish
QR: Inline image 1

Posted via email from Jasper-Net