【问题标题】:Asynchronous OWIN pipeline异步 OWIN 管道
【发布时间】:2015-05-03 12:45:04
【问题描述】:

我正在使用 ASP.NET 5(核心)和 OWIN 管道。我可以看到许多如何输出响应的示例,即:

http://odetocode.com/blogs/scott/archive/2013/11/11/writing-owin-middleware.aspx

但是,如果您采取以下措施:

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Run(context =>
        {
            MvcHandler mvcHandler = new MvcHandler();
            return mvcHandler.ProcessRequest(context);
        });
    }
}

public class MvcHandler
{
    public Task ProcessRequest(HttpContext context)
    {
        return Task.Run(() => ProcessRequestInternal(context));
    }

    private void ProcessRequestInternal(HttpContext context)
    {
        context.Response.WriteAsync("Hello world!");
    }
}

如果执行上面的代码,由于ProcessRequestInternal不是异步的,那么请求仍然是异步响应还是会一个接一个地响应?

【问题讨论】:

    标签: asp.net asynchronous owin


    【解决方案1】:

    WriteAsync 是异步的,在非异步上下文中调用。这将孤立返回的任务。

    您可以返回任务,也可以等待它。

    private Task ProcessRequestInternal(HttpContext context)
    {
        return context.Response.WriteAsync("Hello world!");
    }
    

    或

    private void ProcessRequestInternal(HttpContext context)
    {
        context.Response.WriteAsync("Hello world!").Wait();
    }
    

    最好是传播异步上下文:

    private async Task ProcessRequestInternal(HttpContext context)
    {
        await context.Response.WriteAsync("Hello world!");
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 2017-01-30
      • 2021-05-11
      相关资源
      最近更新 更多