gpt4 book ai didi

c# - 什么时候使用 await async 不好?

转载 作者:行者123 更新时间:2023-12-03 18:13:57 25 4
gpt4 key购买 nike

我有一个使用 C# 编写的基于 ASP.NET Core 3.1 的项目。我知道使用 await 的最佳时间和 async是在访问外部资源时,例如从数据库中提取数据、访问文件或发出 HTTP 请求。这释放了线程,因此可以完成更多工作,而不是让线程坐在那里等待代码完成。

但是,我试图弄清楚在什么时候使用 async/await会伤害性能吗? await时是否释放线程的过程任务完成时调用并检索线程有成本吗?

接下来找到的代码被异步调用。实际上,不需要异步调用该代码,因为所有代码都在内存中执行,并且没有发出外部请求。

public interface ILocator
{
Task<Model> ExampleAsync();
}

public class Example : Controller
{
public ILocator Locator { get; set; }

public Example(ILocator locator)
{
Locator = locator;
}

public async Task<IActionResult> Example()
{
Model model = await Locator.ExampleAsync();

return View(model);
}
}

public class Locator : ILocator
{
pubilc Task ExampleAsync()
{
Example model = new Example();
model.Status = "New";

return Task.CompletedTask;
}
}

这是上面代码的同步版本
public interface ILocator
{
Model Example();
}

public class Example : Controller
{
public ILocator Locator { get; set; }

public Example(ILocator locator)
{
Locator = locator;
}

public IActionResult Example()
{
Model model = Locator.Example();

return View(model);
}
}

public class Locator : ILocator
{
pubilc Example()
{
Example model = new Example();
model.Status = "New";
}
}

由于不必要的 await/async,代码的异步版本是否会比同步版本具有更高的成本/更低的性能?用法?

什么时候会 async/await弊大于利?

最佳答案

您通常使用 async/await在执行 I/O 绑定(bind)任务时,例如从流中读取、从 DB 中读取、通过网络发送内容或等待响应。

这使得线程可用于执行其他一些(与 CPU 相关的工作)。

从技术上讲,async/await 在原始性能方面较慢,但是,它增加了应用程序的可伸缩性,因为它允许线程可用于其他工作,而其他线程正在等待 I/O 绑定(bind)操作。

关于c# - 什么时候使用 await async 不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60672991/

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