Can't exit await when stopping Unity Editor
Unity: 2022.3.21f1 UniTask: 2.5.4
If you stop the Unity Editor with this code, it will not advance to wait3 If you destroy GameObject, proceed to wait3 Is this behavior due to the fact that PlayerLoop must be stopped in the Unity Editor?
public class Sample : MonoBehaviour
{
public async void OnDestroy()
{
await UniTask.WaitUntil(() => true);
Debug.Log("wait1");
await UniTask.WaitUntil(() => true);
Debug.Log("wait2");
await UniTask.WaitUntil(() => true);
Debug.Log("wait3");
}
}
The problem here is that you're using async void, which uses System.Threading.Tasks.Task (instead of UniTask), and it uses the default SynchronizationContext (which doesn't care about enter/exit playmode at all).
I recommend changing the code to something like this instead ` private void OnDestroy() { // kick off async method OnDestroyAsync().Forget(); }
private async UniTaskVoid OnDestroyAsync() { // ... your async code here } `
I tried the code I was presented, but it didn't work After all there is await that does not proceed when the editor is stopped
Oh, you DO want the code to continue when leaving PlayMode? Don't use UniTask -- it specifically is designed to not do this. Use built-in Task instead.
Use a built -in task