Я пытаюсь понять правильное использование Task vs ValueTask в .NetCore2.0 (+) или C # 7.0 (+)
Задача —
- Типы классов / объектов и использование кучи памяти
- следует использовать в методе async, когда операция завершится в итоге бывший. сетевой звонок
ValueTask —
- Тип структуры / значения и использует стековую память
- следует использовать в методе async, когда вывод операции уже находится в памяти или операция завершается немедленно
Исходя из этого, моя реализация оправдывает оба использования?
public class Utility
{
public async ValueTask<int> Add(int n1, int n2)
{
//immediately available
return await Task.Run(() => (n1 + n2))
.ConfigureAwait(false);
}
public async Task<string> Get(string email)
{
//eventually available
string user = await Task.Run(() => GetFromDb(email))
.ConfigureAwait(false);
string GetFromDb(string email)
{
// do a database call over network
// & get the user based on the input email
return "User from Db";
}
return user;
}
}
Просмотрите и предложите. Спасибо!