This question already has an answer here:
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
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.