Inlining functions - это оптимизация компилятора, которая заменяет сайт вызова функции телом вызываемого абонента. Эта оптимизация поддерживается для regular C# functions.Могут ли функции async быть встроенными?
Async функции, которые поддерживают шаблон async-await в C# 5.0 имеют специальную декларацию, которая включает в себя 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 CalleeAsync() { return SomeOperationAsync(); } ' –
I4V
@ I4V Конечно. Имейте в виду, что это просто упрощенный концептуальный пример. Сценарии реальной жизни, вероятно, будут немного сложнее :) – talkol