gpt4 book ai didi

asp.net - 异步操作方法和 IO 完成端口

转载 作者:行者123 更新时间:2023-12-05 00:27:00 25 4
gpt4 key购买 nike

当我们的应用程序依赖外部服务时,使用异步编程很重要的原因之一是允许 ASP.NET 使用 IO 完成端口,而不是阻塞线程等待外部服务响应,ASP.NET可以将执行停在 IO 完成端口并使用线程处理另一个请求,只要外部服务响应,ASP.NET 就会再次获取该执行并恢复它。这样,没有线程是阻塞的。

异步方法的一个例子是:

[HttpPost]
public async Task<ActionResult> Open(String key)
{
Foo foo= await _externalService.GetFoo(key);
return View(foo);
}

但是如果我们对外部服务使用多个请求会发生什么? ASP.NET 如何处理它?
[HttpPost]
public async Task<ActionResult> Open()
{
List<Task<Foo>> tasks = new List<Task<Foo>>();

foreach (var key in this.Request.Form.AllKeys)
tasks.Add(_externalService.GetFoo(key));

var foos = await Task.WhenAll(tasks);

Foo foo = null;
foreach (var f in foos)
{
if (foo == null && f != null)
foo = f;
else
foo.Merge(f);
}
return View(foo);
}

是否还在使用 IO 完成端口?还是因为 Task.WhenAll正在阻塞线程?

最佳答案

它仍然使用 I/O 完成端口。 WhenAll是异步的,不会阻塞线程。

关于asp.net - 异步操作方法和 IO 完成端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21410083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com