У меня есть сопрограмма, которую я хочу задержать на 2 секунды. Я использую цикл while, который проверяет разницу между initialTime
и now
, чтобы проверить, сколько времени прошло:
IEnumerator MyCoroutine(){
Debug.Log("Before the counter");
//`Time.time` returns the number of seconds since app launch (i.e., `72.33448`)
float initialTime = Time.time;
Debug.Log("initialTime = " + initialTime);
float now = initialTime;
while(now - initialTime < 2.0f){
yield return null;
now = Time.time;
Debug.Log("now = " + now);
}
Debug.Log("After the counter");
//...Stuff that happens after delay
}
По какой-то причине, примерно в 1/5 раза я запускаю его, он не будет точно зависать в цикле, но не сможет выполнить всю сопрограмму: в консоли я вижу, что только Debug.Log("now = " + now);
выполняется один раз, и Debug.Log("After the counter");
никогда не происходит - я ожидал, что правильное зависание цикла покажет Debug.Log("now = " + now);
бесконечно.
Что может быть не так с логикой вокруг этого таймера, которая может вызвать такое поведение?
Редактировать : Я бы предпочел придерживаться норм Unity по использованию StartCoroutine()
и StopCoroutine()
вместо System.Threading
, если это возможно.