[英]Dependency Injected UserManager is disposing on async call (ASP.NET CORE)
[英]async call not effectiveness in asp.net core
我想测试ASP.NET Core 2.0中异步请求与同步请求的有效性。 为此,我将Kestrel / Libuv ThreadCount
为1,以强制其仅对所有请求使用单个线程。
public class Program
{
public static void Main(string[] args)
{
WebHost.CreateDefaultBuilder(args)
.UseLibuv(options =>
{
options.ThreadCount = 1;
})
.UseStartup<Startup>()
.Build()
.Run();
}
}
然后,我在控制器中编写一些简单的代码来调用异步方法。 在索引操作中,我在ViewBag中设置开始时间,然后异步调用Doing
函数,最后在ViewBag中设置结束时间。
public class HomeController : Controller
{
public async Task<IActionResult> Index()
{
ViewBag.Start = DateTime.Now;
await Doing();
ViewBag.Finish = DateTime.Now;
return View();
}
public async Task Doing()
{
await Task.Delay(5000);
}
}
查看代码是:
<div class="row">
Start: @ViewBag.Start
</div>
<div class="row">
Finish: @ViewBag.Finish
</div>
当我运行该应用程序并同时在两个浏览器中浏览到该页面时,我希望请求的开始时间大致相等。 但是,尝试此操作时,仅在第一个请求完成后才启动第二个请求。
例如,两个浏览器中的输出如下:
Start: 10/10/2017 10:16:36 AM
Finish: 10/10/2017 10:16:43 AM
Start: 10/10/2017 10:16:43 AM
Finish: 10/10/2017 10:16:50 AM
我的测试或概念有什么问题?
为了进行测试,我将以下代码添加到Program Main
方法中,设置工作线程数为4。
public static void Main(string[] args)
{
ThreadPool.SetMaxThreads(workerThreads: 4, completionPortThreads: 4);
CreateWebHostBuilder(args).Build().Run();
}
并向控制器添加两种简单的查询方法,一种简单,另一种是异步的。 两次查询都需要2秒才能执行。 我使用Dapper进行运行查询。
private void Query()
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
connection.Execute("WAITFOR DELAY '00:00:02';");
}
}
private async Task QueryAsync()
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
await connection.ExecuteAsync("WAITFOR DELAY '00:00:02';");
}
}
然后添加三个动作以进行同步,异步,并行测试
public IActionResult Sync()
{
Query();
Query();
return Ok();
}
public async Task<IActionResult> Async()
{
await QueryAsync();
await QueryAsync();
return Ok();
}
public async Task<IActionResult> Parallel()
{
var task1 = QueryAsync();
var task2 = QueryAsync();
await task1;
await task2;
return Ok();
}
我使用以下配置通过West Wind WebSurge负载测试器测试我的方案
执行时间:60秒,发送请求的线程数:10
此图像是我的测试结果,显示了成功请求的数量,失败请求的数量以及每个操作请求的平均时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.