C # 5의 await
키워드 와 비슷한 Unity 5에서 코 루틴 및 비동기 작업이 완료 될 때까지 기다리는 일반적인 재사용 가능한 방법을 찾고 있습니다.
내가 생각할 수있는 가장 간단한 방법은 다음과 같습니다.
public class SomeUtility {
public bool IsDoingSomething { get; private set; }
public IEnumerator DoSomethingAsync() {
IsDoingSomething = true;
yield return new WaitForSeconds(2);
IsDoingSomething = false;
}
}
그리고 다른 코 루틴에서 :
while(!someUtilityInstance.IsDoingSomething)
yield return null;
그러나 이것은 while
명령문으로 코드를 어지럽히고 재사용 할 수 없으므로 (간단한 유틸리티 기능에도 인스턴스 및 전용 클래스가 필요합니다!) 필요하지 않은 많은 단일 또는 정적 항목입니다.
내가 찾은 가장 가까운 것은 Unity를 사용하는 것 AsyncOperation
입니다. 이것은 매우 훌륭하게 작동합니다.
public static IEnumerator Await(this AsyncOperation operation) {
while(!operation.isDone)
yield return operation;
}
yield return SceneManager.LoadLevelAsync("blaaaah").Await();
그러나 .. 문제는 어떻게 AsyncOperation
? 예를 들어 몇 가지 서비스 SceneManager
가 사용하고 있지만 문서에는 사용자 정의 작업을 작성하거나 기존 코 루틴 등을 래핑하는 것과 관련된 내용이 전혀 없습니다.
그렇다면 맞춤형 코 루틴을 위해 간단하고 일반적이며 재개 가능한 "대기"를 만드는 방법이 있습니까?
아마도 리플렉션과 콜백을 사용합니까? 코 루틴에 두 가지 방법을 전달하십시오. 첫 번째 방법입니다. 리플렉션을 사용하여 완료된 시점을 확인한 다음 두 번째 것을 호출하십시오.
—
Evorlor