65 lines
1.5 KiB
C#
65 lines
1.5 KiB
C#
using System;
|
||
using System.Collections;
|
||
using System.Threading;
|
||
using DG.Tweening;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
namespace AssemblyCSharp
|
||
{
|
||
public class ThreadJobTest:MonoBehaviour
|
||
{
|
||
|
||
public Image greenRect;
|
||
public Image pinkRect;
|
||
|
||
ThreadJob job;
|
||
|
||
void Awake()
|
||
{
|
||
job = new ThreadJob(
|
||
() => {
|
||
Debug.Log("Work Thread :" + Thread.CurrentThread.ManagedThreadId + " work!");
|
||
//heavy job
|
||
for (int i = 0; i < 12345; i++)
|
||
{
|
||
for (int j = 0; j < 12345; j++)
|
||
{
|
||
var z = i + j;
|
||
}
|
||
}
|
||
},
|
||
|
||
() => {
|
||
Debug.Log("Down");
|
||
});
|
||
}
|
||
|
||
void Start(){
|
||
|
||
Debug.Log("Main Thread :"+Thread.CurrentThread.ManagedThreadId+" work!");
|
||
StartCoroutine (Move());
|
||
}
|
||
|
||
IEnumerator Move()
|
||
{
|
||
|
||
pinkRect.transform.DOLocalMoveX(250, 1.0f);
|
||
yield return new WaitForSeconds(1);
|
||
pinkRect.transform.DOLocalMoveY(-150, 2);
|
||
yield return new WaitForSeconds(2);
|
||
//AI操作,陷入深思,在异步线程执行,GreenRect不会卡顿
|
||
job.Start();
|
||
yield return StartCoroutine (job.WaitFor());
|
||
pinkRect.transform.DOLocalMoveY(150, 2);
|
||
|
||
}
|
||
|
||
void Update()
|
||
{
|
||
greenRect.transform.Rotate(Vector3.left, Time.deltaTime * 180);
|
||
}
|
||
}
|
||
}
|
||
|