How to execute async 'fire and forget' operation in ASP.NET Web API

11,119

What you are asking to do is extremely dangerous. I have a blog post that explains why this is a bad idea, including code for a BackgroundTaskManager type that minimizes the chance that something will go horribly wrong. Unfortunately, even when you register your background work with the ASP.NET runtime, it's still a bad idea to depend on this behavior.

The proper solution is to have your WebAPI request place a request into a reliable queue (such as Azure Queue), and have an independent service (such as an Azure Worker Role) process that queue.

Share:
11,119
sacretruth
Author by

sacretruth

Truth Engineer

Updated on June 13, 2022

Comments

  • sacretruth
    sacretruth almost 2 years

    So, I have this Web API action, that executes an asynchronous function.

    public void Post([FromBody]InsertRequest request)
    {
        InsertPostCommand.Execute(request);
        DoAsync();
    }
    
    private async void DoAsync()
    {
        await Task.Run(() =>
        {
            //do async stuff here
        });
    }
    

    I actually want the controller action to return to the client whilst the async operation executes.

    I did this and I am getting an exception thus:

    System.InvalidOperationException: An asynchronous module or handler completed while an asynchronous operation was still pending.
    

    How can I achieve this please ??

    Thanks