如何在ASP.NET Web API中执行异步“即发即忘”操作

所以,我有这个Web API动作,它执行一个异步函数。

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

我实际上希望控制器操作在执行异步操作时返回到客户端。

我这样做了,因此我得到一个例外:

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

我怎么能实现这个呢?

谢谢

你要求做的是非常危险的 。 我有一篇博客文章解释了为什么这是一个坏主意,包括一个BackgroundTaskManager类型的代码,可以最大限度地减少出现错误的可能性 。 不幸的是,即使您使用ASP.NET运行时注册后台工作,依赖此行为仍然是一个坏主意。

正确的解决方案是让您的WebAPI请求将请求放入可靠的队列(例如Azure Queue),并拥有一个排队的独立服务(例如Azure Worker Role)进程。