首页 > 后端开发 > C++ > 不同的异步/等待模式如何影响 C# 中的执行时间?

不同的异步/等待模式如何影响 C# 中的执行时间?

Patricia Arquette
发布: 2025-01-12 13:28:42
原创
393 人浏览过

How Do Different Async/Await Patterns Impact Execution Time in C#?

C# 中不同的 Async/Await 模式如何影响执行时间?

异步等待:等待与非等待(启动后忽略)

代码详解

考虑以下代码:

<code class="language-csharp">static async Task Callee()
{
    await Task.Delay(1000);
}

static async Task Caller()
{
    Callee(); // #1 启动后忽略
    await Callee(); // #2 >1s
    Task.Run(() => Callee()); // #3 启动后忽略
    await Task.Run(() => Callee()); // #4 >1s
    Task.Run(async () => await Callee()); // #5 启动后忽略
    await Task.Run(async () => await Callee()); // #6 >1s
}

static void Main(string[] args)
{
    var stopWatch = new Stopwatch();
    stopWatch.Start();
    Caller().Wait();
    stopWatch.Stop();
    Console.WriteLine($"Elapsed: {stopWatch.ElapsedMilliseconds}");
    Console.ReadKey();
}</code>
登录后复制

调用逻辑

#1: 最简单的启动后忽略方式。 #2: 简单等待。 #3: 在线程池线程上启动异步方法并忽略结果。 #4: 在线程池线程上启动异步方法并异步等待其完成。 #5: 与 #3 相同。 #6: 与 #4 相同。

Task.Run 与异步 Lambda 表达式

虽然 Task.Run 会启动一个新线程,但 Task.Run(async => ...) 等效于 Task.Factory.StartNew(async => ...), 它会在线程池上创建一个新任务并立即启动它。

启动后忽略的注意事项

需要注意的是,启动后忽略的方法可能会导致未处理的异常,从而导致应用程序崩溃。因此,在使用它们之前,务必仔细考虑其影响。

以上是不同的异步/等待模式如何影响 C# 中的执行时间?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板