How to safely call an async method in C# without await

If you want to get the exception “asynchronously”, you could do:

  MyAsyncMethod().
    ContinueWith(t => Console.WriteLine(t.Exception),
        TaskContinuationOptions.OnlyOnFaulted);

This will allow you to deal with an exception on a thread other than the “main” thread. This means you don’t have to “wait” for the call to MyAsyncMethod() from the thread that calls MyAsyncMethod; but, still allows you to do something with an exception–but only if an exception occurs.

Update:

technically, you could do something similar with await:

try
{
    await MyAsyncMethod().ConfigureAwait(false);
}
catch (Exception ex)
{
    Trace.WriteLine(ex);
}

…which would be useful if you needed to specifically use try/catch (or using) but I find the ContinueWith to be a little more explicit because you have to know what ConfigureAwait(false) means.

Leave a Comment