返回IHttpActionResult时不一致的异步行为

时间:2015-11-04 07:29:47

标签: .net asynchronous asp.net-web-api owin actionresult

从Web api 2控制器返回IHttpActionResults时,我遇到了不一致的异步行为。

我有以下控制器:

[RoutePrefix("api")]
public class TestController : ApiController
{
    [Route("foo")]
    public async Task<IHttpActionResult> GetFoo()
    {
        string result = await Task.FromResult("foo");
        return Ok();
    }

    [Route("bar")]
    public async Task<IHttpActionResult> GetBar()
    {
        string result = await Task.FromResult("bar");
        return Ok(result);
    }
}

这个中间件插入管道

public class TestMiddleware : OwinMiddleware
{
    public TestMiddleware(OwinMiddleware next)
        :base(next)
    {

    }

    public override async Task Invoke(IOwinContext context)
    {
        await Next.Invoke(context);
        ; // breakpoint here
    }
}

请注意中间件中的断点。

如果我发出以下请求(在调试下):/ api / foo,则应用程序在断点处停止,并且请求仍然从客户端角度打开(在这种情况下为fiddler)。

但是,如果我向/ api / bar发出请求,则在到达断点之前,请求已返回并带有响应。

对于不返回值的其他操作结果也是如此。

这是预期的行为吗?我不喜欢这种不一致,最重要的是,我没有在文档中看到过这一点。

0 个答案:

没有答案