核心代码:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using DG.Tweening;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
//Running方法等待AsyncLoad方法异步执行代码后,再执行Running里的相关代码。
public class Demo : MonoBehaviour
{
public bool isRunning = false;
void Start()
{
StartCoroutine(Running());
//异步子线程执行代码
AsyncLoad();
}
//方法用async标记后,如果方法内没有await,这个方法的调用和普通方法的调用没有区别。
//有await时,在await之前的代码依然在主线程内按顺序执行。
//await Task.Run(() =>{};里面的代码是是子线程。
async void AsyncLoad()
{
try
{
await Task.Run(() =>
{
//子线程执行
Debug.Log("1 AsyncLoad.");
isRunning = true;
});
}
catch (Exception ex)
{
Debug.Log($"ex = {ex}");
}
}
//协程是主线程里的协同线程,严格意义偏主线程里执行。
IEnumerator Running()
{
yield return new WaitUntil(()=> isRunning);
Debug.Log("2 Running");
}
}
执行结果