Eu quero usar ValueTask
. Encontrei em algum lugar que "um ValueTask pode ser aguardado apenas uma vez". Não posso esperar pelo método GetMoney
várias vezes ou o quê? Se sim, como devo alterar meu código?
public class CreditCardService
{
private Dictionary<int, int> _cache = new Dictionary<int, int>()
{
{ 1, 500 },
{ 2, 600 }
};
public async ValueTask<int> GetMoney(int userId)
{
if (_cache.ContainsKey(userId))
{
return _cache[userId];
}
//some asynchronous operation:
Random rnd = new Random();
var money = rnd.Next(100);
_cache[userId] = money;
return await Task.FromResult(money);
}
}
var creditCardService = new CreditCardService();
Console.WriteLine(await creditCardService.GetMoney(1));
Console.WriteLine(await creditCardService.GetMoney(3));
Console.WriteLine(await creditCardService.GetMoney(3));
Cada vez que você liga,
GetMoney
você obtém uma novaValueTask
instância.Então você espera cada uma dessas
ValueTask
instâncias exatamente uma vez.Portanto, seu código não está violando esta regra.
Para violar a regra, você precisaria usar
await
a mesmaValueTask
instância mais de uma vez.Mais algumas informações sobre
ValueTask
s podem ser encontradas neste blog .NET: Entendendo os porquês, o que é e quando do ValueTask .Você está aguardando cada tarefa exatamente uma vez:
O seguinte estaria aguardando uma única tarefa várias vezes: