C# 7 : async 커스텀 리턴 타입
지금까지의 async / await는 void, Task, Task 등 3가지 리턴 타입만을 가질 수 있었는데,
Task는 리턴값이 없는 비동기 메서드를 위해서 사용되었고, Task
C# 7 : ValueTask
async 메서드에서 흔히 사용하는 Task, Task
리턴타입은 비동기 처리가 필요없이 상수값을 리턴할 때도
Task 객체를 항상 만들기 때문에 일부 경우에 성능을 저하시킬 수 있다.
ValueTask예제
private Dictionary<int, int> cache = new Dictionary<int, int>();
private async ValueTask<int> GetCache(int id)
{
if (cache.ContainsKey(id))
{
// 동기 처리. 값 직접 리턴
return cache[id];
}
else
{
// 비동기 처리. Task 객체 생성
int res = await Fetch(id);
cache.Add(id, res);
return res;
}
}