Unity2020.2.4f1,C#,UniTaskを使用しています。
Update()から呼び出したコルーチンから非同期のタスク(UniTask)を呼び出し、
そのタスクが終わるまで待つための良い方法を知りたいです。
以下の(例)のコードで
"CoroutineA Start"
"AsyncTask Start"
"AsyncTask End"
"CoroutineA End"
という順番で出力されるようにしたいです。
C#
1(例) 2async UniTaskVoid AsyncTask() 3{ 4 Debug.Log("AsyncTask Start"); 5 await UniTask.Delay(3000); 6 Debug.Log("AsyncTask End"); 7} 8IEnumerator CoroutineA() 9{ 10 Debug.Log("CoroutineA Start"); 11 // ●ここで非同期のAsyncTaskを呼び出して処理が終わるまで待ちたい 12 Debug.Log("CoroutineA End"); 13 yield return null; 14} 15void Update() 16{ 17 if( Input.GetKeyUp( KeyCode.V ) ) 18 { 19 StartCoroutine( CoroutineA() ); 20 } 21}
●の箇所でawait AsyncTask()と呼びたいところなのですが、awaitは非同期メソッドからしか使えないため
大元の呼び出しをすべてasyncにする必要が出てきてしまうので別の方法を取りたいです。
以下の方法ならyieldで待てなくもないのですが、
「AsyncTask()がisDoneで終わる」ということをCoroutineA側が知ってないといけないので
ちょっといまいちなのかなという気がしています。
C#
1bool isDone; 2async UniTaskVoid AsyncTask() 3{ 4 Debug.Log("AsyncTask Start"); 5 await UniTask.Delay(3000); 6 Debug.Log("AsyncTask End"); 7 isDone = true; 8} 9IEnumerator CoroutineA() 10{ 11 Debug.Log("CoroutineA Start"); 12 13 isDone = false; 14 AsyncTask(); 15 yield return new WaitUntil( ()=> isDone ); 16 17 Debug.Log("CoroutineA End"); 18 yield return null; 19} 20
何か良い方法をご存知の方がいましたらよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/26 23:40 編集