Task — reference type. ValueTask — value type.
1// Task2public async Task<int> GetAsync() {3 return await GetFromDb();4}56// ValueTask — better performance7public async ValueTask<int> GetAsync() {8 if (cache.TryGet("key", out int val)) {9 return val; // No allocation10 }11 return await GetFromDb();12}