기존 소스을 변경시
Task 은 UniTask로 변경
async Task => async UniTask 로
async void => async UniTaskVoid 로
Forget() 처리가 가능할 경우 로 async UniTaskVoid 로 처리
testA.Forget();
async UniTaskVoid testA()
{
}
async 가 필요없는 삭제할것
UniTask SomeFunction() { // 아무것도 하지 않음 return UniTask.CompletedTask; }
UniTaskVoid는 await할 수 없음
UniTaskVoid는 일반적인 UniTask와 다르게 await할 수 없습니다.
만약 비동기적으로 호출해야 한다면, UniTaskVoid 대신 UniTask를 사용하세요.
async UniTaskVoid Test() { await UniTask.Delay(500); Debug.Log("완료"); } // ❌ 잘못된 코드 (await 불가능) // await Test(); // 컴파일 에러 발생!
기존 함수 Get;Set; 으로 되었는건 await 함수로 만들것
UniTaskVoid 정리
특징설명
리턴값 없음 |
return;을 명시적으로 쓰지 않아도 됨 |
자동 실행됨 |
Forget() 없이도 실행됨 |
await 필수 |
await이 없으면 경고 발생 |
예외 전파됨 |
try-catch로 예외를 직접 처리해야 함 |
await 불가능 |
UniTaskVoid는 await할 수 없음 → UniTask를 사용해야 함 |
추천: UniTaskVoid는 주로 Unity의 이벤트 기반 코드(Update, OnTriggerEnter 등)에서 사용하고, 일반적인 비동기 함수에서는 UniTask를 사용하는 것이 더 안전합니다.
코루틴 -> To.Coroutine()
Forget() 사용시 이후 코드와 동시혹은 늦게 되어도 상관없는 코드일경우에 적용하고
문제 발생하면 상위 단계로 올라가서 Forget() 처리
webgl 빌드시
- UniTask.RunOnThreadPool() ❌ → WebGL에서는 사용 불가
- await Task.Delay(1000); ❌ → 대신 UniTask.Delay() 사용
- UniTask.Yield(PlayerLoopTiming.Background) ❌ → 대신 Update 사용
- async void ❌ → async UniTask 또는 async Task 사용
- UnityWebRequest 사용 시 CORS 문제 주의