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带来压力,并且比其他方法慢得多。底线是不要忽略编译器警告