Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

like image 604
sacritruth Avatar asked Nov 12 '13 00:11

sacritruth


Video Answer


1 Answers

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.

like image 67
Stephen Cleary Avatar answered Sep 18 '22 07:09

Stephen Cleary