비동기 작업 / 코 루틴을 기다리는 방법은 무엇입니까?


11

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

답변:



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.