当线程完成时主线程上的回调

本文关键字:线程 回调 完成时 | 更新日期: 2023-09-27 18:09:54

我需要在工作线程完成时通知主线程。当我取一个委托并在另一个线程上执行时当它完成时,它会在那个线程上执行,这不是我想要的。我也不能检查它是否完成,因为我有一些限制(Unity编辑器中的"更新"不是每帧调用)。我还有别的选择吗?

当线程完成时主线程上的回调

可以使用async/await.

async void MyFunc()
{
    await Task.Run(() => { /* your work in thread */ });
    //Your work is finished at this point
}

作为一个优点,你可以用try-catch块包围它,以一种聪明的方式捕获工作中可能发生的异常。

//This is a helper coroutine
IEnumerable RunOffMainThread(Action toRun, Action callback) {
  bool done = false;
  new Thread(()=>{
    toRun();
    done = true;
  }).Start();
  while (!done)
    yield return null;
  callback();
}
//This is the method you call to start it
void DoSomethingOffMainThread() {
  StartCoroutine(RunOffMainThread(ToRun, OnFinished));
}
//This is the method that does the work
void ToRun() {
  //Do something slow here
}
//This is the method that's called when finished
void OnFinished() {
   //off main thread code finished, back on main thread now
}