이게 뭐고 왜 쓰나 이름처럼 ValueTask는 값(Value) 타입의 Task객체이다. 그렇다 Task는 참조 타입이다. 따라서 Task객체를 생성하는 것은 곧 힙 할당이 일어난다는 말이다. 그런데 Task들 중에서는 작업이 동기적으로 완료될 수 있는 애들이 있다. 즉 한 Task를 호출한 쓰레드가 그대로 이어서 다음 코드를 실행하는 것이다. private async Task GetData(int index){ if (_cachedData.TryGetValue(index, out var data)) return data; return await CalcSomethingLong(index);} 이를태면 위와 같은 메서드는 그 값이 이미 계산된 적이 있다면 즉시 값을 리턴한다. 이 ..