gpt4 book ai didi

asp.net-mvc - 如果我在操作定义中使用异步任务,该操作是否应该与异步相关?

转载 作者:行者123 更新时间:2023-12-03 08:50:31 25 4
gpt4 key购买 nike

说我有

public class MyController : Controller
{
...
public async Task<IActionResult> MyAction()
{
DoSomethingSync();
return View();
}

用得好吗?难道它不应该至少有一些异步来证明“异步任务 L...”定义的合理性吗?该 Controller 中的每个操作似乎都遵循相同的模式。

最佳答案

编译器向您发出警告是有原因的。不要忽视它。如果您的方法不需要异步,那么不要将其标记为异步。只要您在方法签名中包含单词async,编译器就会生成一堆代码来支持异步。这些额外的代码将无缘无故地运行,从而降低性能。

作为一个例子,向您展示它是多么浪费,我使用 BenchmarkDotNet 运行了一个非常基本的基准测试,比较了两种方法:

[Benchmark]
public static async Task<string> AsyncString()
{
return "This is my string This is my string This is my string This is my string This is my string";

}

[Benchmark(Baseline = true)]
public static string String()
{
return "This is my string This is my string This is my string This is my string This is my string";
}

结果:

|      Method |       Mean |     Error |    StdDev | Ratio | RatioSD |  Gen 0 | Gen 1 | Gen 2 | Allocated |
|------------ |-----------:|----------:|----------:|------:|--------:|-------:|------:|------:|----------:|
| String | 0.0000 ns | 0.0000 ns | 0.0000 ns | ? | ? | - | - | - | - |
| AsyncString | 27.2304 ns | 0.7644 ns | 2.1685 ns | ? | ? | 0.0172 | - | - | 72 B |

仅使用 async 会导致 72 字节的分配,这会给 GC 带来压力,并且比替代方案慢得多。最重要的是不要忽略编译器警告。

关于asp.net-mvc - 如果我在操作定义中使用异步任务,该操作是否应该与异步相关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59255904/

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