본문 바로가기
PROGRAMING📚/Unity📑

[UNITY]비동기 프로그램 만들기: async / await

별찌루 2024. 4. 5.
728x90
반응형

비동기 프로그램 만들기: async / await 

프로그래밍 방식에는 동기식과 비동기식이 있다

동기식은 순차적인 실행 방식을 의미하고 일반적으로 동기식 작업 방식으로 진행이 된다

 

비동기식은 동기식과는 달리 여러작업들을 동시에 실행 하는 방식을 말한다

이런 비동기식 처리는 동시에 여러작업을 수행하여 작업이 완료 될 때 까지 기다리지 않고 다음 코드를 실행 할 수 있게 해준다

 

비동기 프로그래밍은 유니티에서 자주 사용되며,

네트워크 요청, 파일 로딩 등과 같은 작업을 효율적으로 처리할 수 있도록 도와준다

이러한 비동기식 작업은 구조를 정확하게 파악하지 않고 구현 하면 무한 루프, 무한 대기 상태에 빠지게 된다

 

동기 처리는 실행순서가 보장되지만 속도가 느리고

비동기 처리는 속도가 빠르지만 실행 순서가 보장되지 않는다는 특징을 가지고 있다

 

코루틴(Coroutine)을 활용한 비동기 작업


코루틴은 유니티의 비동기 작업을 구현하는 주요 방법 중 하나로

비동기식 작업 방식을 구현 할 수 있지만 동기식 방식을 이용하여 비동기식 방식을 구현하기 때문에

완전히 같은 효율을 보여주지 않는다

using UnityEngine;
using System.Collections;

public class AsyncExample : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(LoadDataAsync());
    }

    IEnumerator LoadDataAsync()
    {
        Debug.Log("Data loading started.");
        // 비동기적으로 데이터를 로딩하는 동안 대기
        yield return new WaitForSeconds(2); // 예시로 2초 대기
        Debug.Log("Data loaded successfully.");
    }
}

 

async / await 를 활용한 비동기 작업

 

async/await 는 멀티 스레드로 비동기 작업을 도와준다

async/await 를 사용하는 방법은 반환형 앞에 async을 작성해주면

비동기 메서드를 선언 할 수있다

 

비동기 메서드는 Task, Task< TResult >, void 의 반환형이 있다

public async void Load(){await~}
public async Task Load(){await~}
public async Task<int> Load(){await~}

async voidasync Task 둘의 주요 차이는 반환 유형(Return Type)에 있다

 

async void 는 이벤트 핸들러에서 사용되고

호출자에게 반환 값을 돌려주지 않는다

예외가 발생한 경우에는 호출자에게 반환값을 돌려주지 않고

해당 메서드 내부에서 예외 처리가 된다.

주로 비동기 이벤트 처리 및 UI 업데이트 등에 사용된다

 

async Task 는 비동기 작업이 완료 되고 결과 값을 반환해야 할 때 사용된다

Task를 반환하고 호출자가 해당 작업이 완료 되는 것을 기다릴 수 있다

예외가 발생하는 경우 호출자에게 예외가 전파되어 처리가 된다

비동기 메서드가 작업을 완료 할 때까지 대기하고자 할때 사용한다

async void MyAsyncMethod()
{
    await SomeAsynchronousOperation();
    // 비동기 작업 완료 후 실행될 코드
}
async Task MyAsyncMethod()
{
    await SomeAsynchronousOperation();
    // 비동기 작업 완료 후 실행될 코드
}
using UnityEngine;
using System.Threading.Tasks;

public class AsyncExample : MonoBehaviour
{
    private void Start()
    {
        LoadDataAsync();
    }

    async void LoadDataAsync()
    {
        Debug.Log("Data loading started.");
        await Task.Delay(2000); // 2초 동안 대기
        Debug.Log("Data loaded successfully.");
    }
}

 

 

🔽참고🔽

728x90
반응형

댓글