7 .net c# asynchronous promise async-await
我有一个使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是上面代码的同步版本
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";
}
}
Run Code Online (Sandbox Code Playgroud)
由于不必要的await/async
使用,异步版本的代码会比同步版本的代码成本更高/性能更低吗?
什么时候async/await
弊大于利?
您通常async/await
在执行 I/O 绑定任务时使用,例如从流中读取、从数据库中读取、通过网络发送某些内容或等待响应。
这使线程可用于执行其他一些(与 CPU 相关的工作)。
从技术上讲,async/await 在原始性能方面较慢,但是,它增加了应用程序的可伸缩性,因为它允许线程可用于其他工作,而其他人正在等待 I/O 绑定操作。
我有一个使用 C# 编写的基于 ASP.NET Core 3.1 的项目。
这意味着 async/await 将允许您大幅增加容量(以每秒请求数为单位)。
什么时候使用 async/await 会损害性能?
它会增加一点固定金额的开销。与 I/O 成本相比,它通常很小,而且并不真正引人注目。
async/await 什么时候弊大于利?
在网站/服务中,负载永远不会超过每秒 50 个请求。
即便如此,“伤害”也将非常小。
实际数字取决于硬件、I/O 工作量等。
实际上,该代码不需要异步调用,因为所有代码都在内存中执行
在这种情况下,同步处理会更快。
但我知道团队更喜欢让所有操作异步,只是为了统一。由于开销很小,我认为这也是一种有效的方法。
归档时间: |
|
查看次数: |
372 次 |
最近记录: |