gpt4 book ai didi

c# - 将 `Func` 传递给方法 - 调用 func 与 lambda 与 async/await lambda 之间有什么区别?

转载 作者:行者123 更新时间:2023-11-30 17:29:55 27 4
gpt4 key购买 nike

让我们考虑一下方法:

public static void FireAsyncAndForget(Func<Task> func)
{
JoinableTaskFactory.RunAsync(func).FileAndForget();
}

async Task DoAsync()
{
await SomeOtherMethodAsync();
}

以下 3 个示例在代码执行方式上有什么不同吗?

  1. FireAsyncAndForget(DoAsync);
  2. FireAsyncAndForget(() => DoAsync());
  3. FireAsyncAndForget(async () => await DoAsync());

最佳答案

除非我弄错了,否则这三者的执行看起来是一样的,尽管存在细微差别。

选项 1 将直接执行 DoAsync,而其他两个是调用一个本身调用 DoAsync 的函数。这将在您的堆栈上创建一个额外的条目。与选项 2 相比,相同的逻辑适用于选项 3,有一个额外的 await 调用,所以(除非编译器优化它)我希望它生成一个额外的状态。

虽然看到它们之间存在显着的运行时间差异,但我希望处于微优化领域。

关于c# - 将 `Func<Task>` 传递给方法 - 调用 func 与 lambda 与 async/await lambda 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50590492/

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