Async, Await

최정훈·2024년 10월 7일

동기

순차적으로 실행하는 것. 유니티는 기본적으로 동기적 작업방식을 채택하여 프로젝트를 실행함. 코드를 구현하기 쉽고, 코드의 흐름을 잘 파악할 수 있다는 장점이 있다. 하지만, 교착상태(Blocking)가 지속되는 함수가 있다면, 너무 많은 자원이 소모될 수 있음.

비동기

여러 작업들을 동시에 실행하는 방식. 위에서 언급한 동기방식의 단점을 해결할 수 있다는 것이 장점이다. 하지만, 구현이 복잡해지며 구조를 제대로 파악하지 못하고 설계하면 무한루프에 갇힐 수 있다.

  • async, await예시
    class Test{
    	void Start(){
    		Debug.Log("Start");
    		TestAsync();
    		Debug.Log("Still running Fuc");
    	}
    	
    	async void TestAsync(){
    		Debug.Log("Fuc start");
    		await Task.Delay(7000);
    		Debug.Log("Fuc End");
    	}
    }
    
    // 출력 //
    // Start
    // Fuc start
    // Still running Fuc
    
    // ----- 7초 경과 후 -----
    
    // Fuc End
    
    비동기 매서드는 async 키워드를 매서드 앞에 붙여서 생성한다. 위의 예제에서는 void 형으로 선언하였는데, 반환값을 가질 수 있다. await의 의미는 작업을 기다린다는 의미로, 해당 지점에서 정지된다. 비동기로 선언된 매서드는 반드시 이를 하나 이상 가져야한다.
profile
게임개발자(희망)의 공부일지

0개의 댓글