Як чекати операцій з асинхронізацією / процедурами?


11

Я шукаю загальний / багаторазовий спосіб дочекатися завершення процедур і асинхронних операцій у Unity 5, подібному до awaitключового слова C # 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, користуються ним, але в документації повністю бракує нічого про створення спеціальних операцій або обгортання існуючих процедур тощо.

Отже, чи є спосіб створити простий, загальний і доступний "очікування" для користувальницьких процедур?


Можливо, використовувати роздуми та зворотні дзвінки? Передайте два способи в супровід. Перший спосіб зробити. Використовуйте роздуми, щоб побачити, коли воно закінчиться, а потім зателефонуйте другому
Еворлор

Відповіді:



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.