【发布时间】:2013-09-02 07:28:56
【问题描述】:
Inlining functions 是一种编译器优化,它将函数调用站点替换为被调用者的主体。 regular C# functions 支持此优化。
在 C# 5.0 中支持async-await 模式的Async 函数有一个特殊声明,其中涉及async 修饰符并用Task<> 包装返回值。
异步函数也可以内联吗?
示例:
假设我有这些功能:
private async Task<int> CalleeAsync() {
return await SomeOperationAsync();
}
private async Task<int> CallerAsync() {
return await CalleeAsync();
}
它们是否可以优化为:
private async Task<int> CallerAsync() {
return await SomeOperationAsync();
}
额外积分:
如果支持,谁可以决定内联的内容?编译器? JIT?我?
如果它不受支持,我是否应该担心这一点并避免为了可读性而有时添加的过多包装器?
【问题讨论】:
-
无需再创建一项任务。
private Task<int> CalleeAsync() { return SomeOperationAsync(); } -
@I4V 当然。请记住,这只是一个简单的概念示例。现实生活中的场景可能会稍微复杂一些:)
标签: c# .net optimization asynchronous async-await