async
和
await
MSDN(如果我没记错的话:)说:“这是一个很好的做法,可以使您的web应用程序具有可扩展性。”。基本上,它有助于利用您的线程池,因此只有一个线程可以这样做
只有1个
要求假设您有以下操作:
public async Task<IActionResult> AddUser(User user)
{
///Logic to add user
return await Task.Run(() => View());
}
这个
标记修饰符是为了告诉.NET运行时这是一个可以应用上述机制的工作项。没有
等候
为了验证概念,我在我的
HomeController
:
public async Task<ActionResult> FineGrained()
{
return await Task.Run(() => {
return Json(Thread.CurrentThread.ManagedThreadId, JsonRequestBehavior.AllowGet);
});
}
public async Task<ActionResult> CoarseGrained()
{
return await Task.Run(async () => {
await Task.Delay(TimeSpan.FromSeconds(5));
return Json(Thread.CurrentThread.ManagedThreadId, JsonRequestBehavior.AllowGet);
});
}
这是测试线程利用率的jquery脚本:
$.when(
$.getJSON('/Home/FineGrained'),
$.getJSON('/Home/CoarseGrained'),
$.getJSON('/Home/FineGrained'),
$.getJSON('/Home/FineGrained'),
$.getJSON('/Home/FineGrained')
).done(function (v1, v2, v3, v4, v5) {
console.log(v1[0]);
console.log(v2[0]);
console.log(v3[0]);
console.log(v4[0]);
console.log(v5[0]);
});
30
25
30
25