How to execute async 'fire and forget' ope

2019-01-15 08:33发布

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

1条回答
Summer. ? 凉城
2楼-- · 2019-01-15 09:14

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.

查看更多
登录 后发表回答