繁体   English   中英

传递`Func <Task> `to a method - 调用func与lambda和async / await lambda之间的任何差异?

[英]Passing `Func<Task>` to a method - any differences between calling func vs. lambda vs. async/await lambda?

我们考虑一下方法:

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调用,因此(除非编译器将其优化掉)我会期望它生成一个额外的状态。

然而,看到这些之间存在明显的运行时间差异,我预计会出现微优化领域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM