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

Asp.net mvc 如果在操作定义中使用异步任务,该操作是否应该与异步相关?,asp.net-mvc,async-await,Asp.net Mvc,Async Await,说我有 public class MyController : Controller { ... public async Task<IActionResult> MyAction() { DoSomethingSync(); return View(); } 公共类MyController:Controller { ... 公共异步任务MyAction() { DoSomethingSync(); 返回视图(); } 它使

说我有

public class MyController : Controller
{
...
    public async Task<IActionResult> MyAction()
    {
        DoSomethingSync();
        return View();
    }
公共类MyController:Controller
{
...
公共异步任务MyAction()
{
DoSomethingSync();
返回视图();
}

它使用得好吗?它不应该至少有一些异步的东西来证明“异步任务L…”定义?此控制器中的每个操作似乎都遵循相同的模式。

编译器向您发出警告是有原因的。不要忽略它。如果您的方法不需要是
async
,则不要这样标记它。只要在方法签名中包含
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";
}

仅使用
async
会导致72字节的分配,这将给GC带来压力,并且比其他方法慢得多。底线是不要忽略编译器警告。

编译器之所以向您发出警告是有原因的。不要忽略它。如果您的方法不需要
async
,那么就不要将其标记为这样。只要在方法签名中包含单词
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";
}
仅使用
async
会导致72字节的分配,这将给GC带来压力,并且比其他方法慢得多。底线是不要忽略编译器警告