Как пропустить две ожидающие задачи?C#

Место общения программистов C#
Ответить
Anonymous
 Как пропустить две ожидающие задачи?

Сообщение Anonymous »

Я использую Unity 2022.3.36f1 и библиотеку UniTask, но мне кажется, мне не хватает некоторых важных базовых знаний.
Я пытаюсь воспроизвести одно видео, затем другое после этого если не будет вызвано действие «пропустить» во время любого из видео, которое должно остановить их обоих и продолжить код. Это не работает, если вы пропускаете первое видео - второе все равно воспроизводится.
Мое внешнее логическое значение _isSkip либо сбрасывается обратно на false, либо более скорее всего, он использует начальное значение, и в этом случае как мне заставить WaitUntil проверять значение во время его запуска?

Код: Выделить всё

private bool _isSkip;

private void SkipVideos() {
_isSkip = true;
Media.VideoStop();
}

private async UniTaskVoid StartMode() {
// this called by StartMode().Forget();

_isSkip = false;

// video1 already playing, takes 7.1s

// SkipVideos can be called during first await OR second, and it should skip BOTH videos
await UniTask.WhenAny(UniTask.Delay(7140), UniTask.WaitUntil(() =>_isSkip == true));

var delay = Media.VideoPlay("video2"); // returns millisecond length of video
// if SkipVideos was called during first delay, when we get to here _isSkip is false, why?
await UniTask.WhenAny(UniTask.Delay(delay), UniTask.WaitUntil(() =>_isSkip == true));

// other code that should be done after both vids finish OR skip was triggered, go here...
}
Сначала я пытался использовать токены отмены, но потом другие вещи не запустились (?). Думаю, я мог бы разбить на подзадачу, но я действительно стараюсь иметь чистый, понятный и простой код — если он станет слишком многословным, мне, вероятно, придется вернуться к сопрограммам.
Я думал, что Media.VideoPlay может быть асинхронным в будущем для аккуратности, но оставил вопрос как есть.

Подробнее здесь: https://stackoverflow.com/questions/792 ... wait-tasks
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»