8

所以,我有这个 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.

请问我怎样才能做到这一点?

谢谢

4

1 回答 1

14

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

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

于 2013-11-12T00:50:01.017 回答