qqq*_*qqq 0 c# middleware .net-core asp.net-core
为什么建议中间件在ASP.NET Core中异步?
例如,在本教程中,建议定制中间件,但我不了解其背后的原因。
public class MyMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
public MyMiddleware(RequestDelegate next, ILoggerFactory logFactory)
{
_next = next;
_logger = logFactory.CreateLogger("MyMiddleware");
}
public async Task Invoke(HttpContext httpContext)
{
_logger.LogInformation("MyMiddleware executing..");
await _next(httpContext); // calling next middleware
}
}
// Extension method used to add the middleware to the HTTP request pipeline.
public static class MyMiddlewareExtensions
{
public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<MyMiddleware>();
}
}
Run Code Online (Sandbox Code Playgroud)
根据文档,这是设计使然
中间件类必须包括:
- 参数类型为的公共构造函数
RequestDelegate。- 名为
Invoke或的公共方法InvokeAsync。此方法必须:
- 返回
Task。- 接受type的第一个参数
HttpContext。
我的理解是,默认情况下管道已设计为异步。
RequestDelegate这是asp.net核心管道的核心,它要求a Task以便允许高性能的模块化HTTP请求管道。
public delegate System.Threading.Tasks.Task RequestDelegate(HttpContext context);
Run Code Online (Sandbox Code Playgroud)
来自评论:致谢@ScottChamberlain
原因是与asp.net核心相比,异步是如何内置的,与非异步版本相比,它允许针对相同硬件的Web请求的吞吐量更高。
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |