C#

Async Task

소나무꼴 2019. 9. 10. 17:10

비동기 프로그래밍을 가능하게 함.

내부적으로 스레드를 생성.( 일부 생성 안되는 경우도 있다는 해외글이 있긴하나 평범하게 쓴다면 무시 )

 

Unity 에서 테스트 

 

using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;

public class Test_AsyncTask1 : MonoBehaviour {

    int back = 0;
    int next = 0;
	
    #region TEST1
    public void Test1()
    {
        Debug.Log("aaa");
        a1();
        Debug.Log("bbb");
    }
    	
	public async Task a1()
    {
        while (next < 10)
        {
            next++;
            await Task.Delay(1000);
        }        
    }

    #endregion

    #region TEST2

    async void Test2()
    {
        Debug.Log("Test2 Start");
        int a = await a2();
        Debug.Log("Test2 End " + a.ToString());
    }
    

    public async Task<int> a2()
    {
        while (next < 10)
        {
            next++;
            await Task.Delay(1);
        }

        return next;
    }
    #endregion

    private void Update()
    {
        if (Input.GetKeyUp(KeyCode.A))
        {
            next = 0;
            Test2();
        }
        if (Input.GetKeyUp(KeyCode.S))
        {
            next = 0;
            Test2();
        }

        if (back != next)
        {
            Debug.Log(next);
            back = next;
        }
    }
}