结论:在Unity 中使用 Task 作为返回值并不会开启新的线程,调用方为主线程;如果是自己创建了Task 对象 即:new Task()则会新开辟一条线层进行处理。
测试场景1: 使用两个异步函数进行修改同一个变量,同时在异步函数之后进行 Main Thread 的 Id ,代码如下
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using UnityEngine;
using UnityFx.Async;
public class TestAsync2 : MonoBehaviour
{
private int TestLog;
private int Len = 5;
private void Start()
{
Task t1 = Modify1();//主线程中执行,遇到 await 即可转交执行权
Task t2 = Modify2();//主线程中执行,遇到 await 即可转交执行权
Debug.LogError("Main Thread >>> " + System.Threading.Thread.CurrentThread.ManagedThreadId);
}
private async Task Modify1() {
for(int i=0; i< Len; i++)
{
TestLog = i; await Task.Delay(1);
}
Debug.Log("t1 thread id >>> " + System.Threading.Thread.CurrentThread.ManagedThreadId);
}
pr
Unity异步Task理解:主线程与新线程行为差异

本文解析Unity中Task的使用,区分主线程执行与自定义Task开启新线程的情况。场景1中,两个异步函数修改同一变量,证实主线程控制。场景2通过new Task展示新线程实例和线程交互。
最低0.47元/天 解锁文章
4260

被折叠的 条评论
为什么被折叠?



