UniTask?
- 유니티의 코루틴과 비슷한 역할(대체)
- 코루틴은 예외처리x, 리턴 불가능
Installation
Github
- com으로 설치하거나
- release 패키지 다운로드.
Namespace
using Cysharp.Threading.Tasks;
Example
- 딜레이
WaitNSeconds(5, Test1.LogSomething).Forget();
private async UniTaskVoid WaitNSeconds(int n, Action action) {
await UniTask.Delay(TimeSpan.FromSeconds(n), cancellationToken: this.GetCancellationTokenOnDestroy());
action();
}
- 특정 조건 만족
private async UniTaskVoid WaitConditon(TestClass testClass) {
await UniTask.WaitUntil(() => testClass.isWaited == true);
Debug.Log("Wait Done..");
}
- Async에서는 ref, out 사용 안됨 -> 인스턴스 자체를 전달해서 불변수 수정함.
- 특정 함수 실행 완료 대기
private async UniTaskVoid WaitFuntionDone() {
await UniTask.WaitUntil(IsConditoned);
Debug.Log(2);
}
bool IsConditoned() {
Debug.Log(1);
return true;
}
- 반복 실행
private async UniTaskVoid CallForNSeconds(int duration) {
while (true) {
await UniTask.Delay(TimeSpan.FromSeconds(duration));
Debug.Log("Tick");
}
}
- 취소
private CancellationTokenSource _source = new();
await UniTask.Delay(TimeSpan.FromSeconds((double)0.5f), cancellationToken: _source.Token);
...
//취소하기
_source.Cancel();
- 토큰을 취소하면 다시 비동기 함수를 호출해도 동작하지 않는다.
- 토큰을 재생성해서 호출