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

I have an async method which returns no data:

public async Task MyAsyncMethod()
{
    // do some stuff async, don't return any data
}

I’m calling this from another method which returns some data:

public string GetStringData()
{
    MyAsyncMethod(); // this generates a warning and swallows exceptions
    return "hello world";
}

Calling MyAsyncMethod() without awaiting it causes a “Because this call is not awaited, the current method continues to run before the call is completed” warning in visual studio. On the page for that warning it states:

You should consider suppressing the warning only if you’re sure that you don’t want to wait for the asynchronous call to complete and that the called method won’t raise any exceptions.

I’m sure I don’t want to wait for the call to complete; I don’t need to or have the time to. But the call might raise exceptions.

I’ve stumbled into this problem a few times and I’m sure it’s a common problem which must have a common solution.

How do I safely call an async method without awaiting the result?

Update:

For people suggesting that I just await the result, this is code that is responding to a web request on our web service (ASP.NET Web API). Awaiting in a UI context keeps the UI thread free, but awaiting in a web request call will wait for the Task to finish before responding to the request, thereby increasing response times with no reason.

12 Answers
12

Leave a Comment