10
13

Func는 반환값이 있는 Action라고 생각하시면 됩니다.

만약에 그냥 List<UniTask>로 선언하고 외부에서 해당 리스트에 Add해보시면 즉시 실행될겁니다.

 

하지만 아래처럼 List<Func<UniTask> 로 선언하면 델리게이트처럼 함수들을 외부에서 Add해도

즉시 실행 되지 않고 잘 저장 됩니다.

 

 

TestUniTask.cs

public class TestUniTask : MonoBehaviour
{
	public List<Func<UniTask>> OnEndEvnt = new List<Func<UniTask>>();  // 비동기 메서드 참조
	private async void DetectGameEnd()
    {
        // OnEndEvnt의 모든 함수가 실행 완료될 때까지 대기
        if (OnEndEvnt.Count > 0)
        {
            foreach (var func in OnEndEvnt)
            {
                await func(); 
            }
        }
    }
}

위코드는 OnEndEvnt처럼 리스트에 등록된 비동기 Task들이 모두 await이 끝날 때까지 순차적으로 실행하고 기다리는것입니다.

만약 다 실행하고 각자 다 await하고 싶다면?

-> UniTask.Void(async () => { await func(); })를 해서 하나씩 따로 기다리시면 됩니다. 

 

외부 클래스

ClearStage.cs

public class ClearStage : MonoBehaviour
{

    private void Start()
    {
        TestUniTask.OnEndEvnt.Add(ClearStageTask);
    }
    public async UniTask ClearStageTask()
    {
        await UniTask.WaitForSeconds(5);
    }
}

 

 

꽤나 삽질했으니 알맞는 상황에 사용해보시기 바랍니다.

 
 

 

 

COMMENT