[英]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个例子之间的代码执行方式有什么不同吗?
FireAsyncAndForget(DoAsync);
FireAsyncAndForget(() => DoAsync());
FireAsyncAndForget(async () => await DoAsync());
除非我弄错了,否则所有这三个看起来都会完全相同,尽管有一个微妙的区别。
选项1将直接执行DoAsync,而其他两个调用自己调用DoAsync的函数。 这将在您的堆栈上创建一个额外的条目。 与2相比,相同的逻辑适用于选项3,还有一个额外的await调用,因此(除非编译器将其优化掉)我会期望它生成一个额外的状态。
然而,看到这些之间存在明显的运行时间差异,我预计会出现微优化领域。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.