主线程和worker分离
Main thread and workers separated
我觉得有点迷茫,找不到一个好的方法来获得一些关于如何解决我的线程问题 C# Unity 的想法。我试图实现的是从长 运行 任务中卸载我的主线程。这是为了避免主线程在主线程可以照常继续之前等待一个或多个任务完成。
现在我有这个测试代码。
public void Start()
{
var workers = new List<DataChunk>();
workers.Add(new DataChunk());
workers.Add(new DataChunk());
foreach (var worker in workers)
{
Task.Run(() => worker);
}
}
DataChunck 只是在此处针对此测试进行了条带化处理,它可能包含假定作为完整任务包含的所有过程。所以现在我这里只有一个计时器来模拟正在做的事情并花时间。
public class DataChunk
{
public bool isDone = false;
public DataChunk()
{
System.Random r = new System.Random();
int rInt = r.Next(1000, 2000);
Thread.Sleep(rInt);
allDataLoaded = true;
Debug.Log("Done " + rInt);
isDone = true;
}
}
这最终并没有真正实现我想要实现的目标,因为它只执行这些 DataChunks 作为连续任务执行,从不放弃主线程。
我认为缺少的是制作这个 asyc,因此它们可以从主线程启动,然后最好不必等待主线程完成。因为这应该尽可能从队列中检查。
如果我愿意将其可视化,应该可以像这样工作。
有人愿意分享实现这样的线程或基于任务的行为所缺少的东西吗?
您正在 DataChunk 构造函数中调用 Thread.Sleep:workers.Add(new DataChunk()),因此您的 Thread.Sleep 步骤不是并行执行的。
最好将 DataChunk 构造函数之外的 Thread.Sleep 逻辑移动到某个 DataChunk class 方法并从 Task.Run(() => worker.SomeMethodWithThreadSleep() 调用此方法);
我觉得有点迷茫,找不到一个好的方法来获得一些关于如何解决我的线程问题 C# Unity 的想法。我试图实现的是从长 运行 任务中卸载我的主线程。这是为了避免主线程在主线程可以照常继续之前等待一个或多个任务完成。
现在我有这个测试代码。
public void Start()
{
var workers = new List<DataChunk>();
workers.Add(new DataChunk());
workers.Add(new DataChunk());
foreach (var worker in workers)
{
Task.Run(() => worker);
}
}
DataChunck 只是在此处针对此测试进行了条带化处理,它可能包含假定作为完整任务包含的所有过程。所以现在我这里只有一个计时器来模拟正在做的事情并花时间。
public class DataChunk
{
public bool isDone = false;
public DataChunk()
{
System.Random r = new System.Random();
int rInt = r.Next(1000, 2000);
Thread.Sleep(rInt);
allDataLoaded = true;
Debug.Log("Done " + rInt);
isDone = true;
}
}
这最终并没有真正实现我想要实现的目标,因为它只执行这些 DataChunks 作为连续任务执行,从不放弃主线程。
我认为缺少的是制作这个 asyc,因此它们可以从主线程启动,然后最好不必等待主线程完成。因为这应该尽可能从队列中检查。
如果我愿意将其可视化,应该可以像这样工作。
有人愿意分享实现这样的线程或基于任务的行为所缺少的东西吗?
您正在 DataChunk 构造函数中调用 Thread.Sleep:workers.Add(new DataChunk()),因此您的 Thread.Sleep 步骤不是并行执行的。
最好将 DataChunk 构造函数之外的 Thread.Sleep 逻辑移动到某个 DataChunk class 方法并从 Task.Run(() => worker.SomeMethodWithThreadSleep() 调用此方法);