// can not pass CancellationToken because can't handle JobHandle's Complete and NativeArray.Dispose. public static UniTask ToUniTask(this JobHandle jobHandle, PlayerLoopTiming waitTiming) { var handler = JobHandlePromise.Create(jobHandle, out var token); { PlayerLoopHelper.AddAction(waitTiming, handler); } return(new UniTask(handler, token)); }
// Cancellation is not supported. public static JobHandlePromise Create(JobHandle jobHandle, out short token) { // not use pool. var result = new JobHandlePromise(); result.jobHandle = jobHandle; TaskTracker.TrackActiveTask(result, 3); token = result.core.Version; return(result); }
public static UniTask.Awaiter GetAwaiter(this JobHandle jobHandle) { var handler = JobHandlePromise.Create(jobHandle, out var token); { PlayerLoopHelper.AddAction(PlayerLoopTiming.EarlyUpdate, handler); PlayerLoopHelper.AddAction(PlayerLoopTiming.PreUpdate, handler); PlayerLoopHelper.AddAction(PlayerLoopTiming.Update, handler); PlayerLoopHelper.AddAction(PlayerLoopTiming.PreLateUpdate, handler); PlayerLoopHelper.AddAction(PlayerLoopTiming.PostLateUpdate, handler); } return(new UniTask(handler, token).GetAwaiter()); }