Вы блокируете свой основной поток, когда используете while(!finished){}
.Лучше вы должны переместить свою сопрограмму в другой сценарий.т.е. где ваши обработчики доступны.И вызовите каждого обработчика в сопрограмме.Если соединение недоступно, перейдите к следующему обработчику в следующем экземпляре сопрограммы.
Вы можете проверить измененную функцию.Функция представляет собой грубый фрагмент кода, основанный на вашем коде, который продолжает проверять соединение до тех пор, пока он либо не подключится к какому-либо из обработчиков, либо не исчерпает обработчики.
public IEnumerator TryConnection(int index)
{
if (handlers.count > index)
{
//Get next handler here
Handler handler = handlers[index];
UnityWebRequest www = UnityWebRequest.Get(handler.url);
www.timeout = 5;
yield return www.SendWebRequest();
if (www.isNetworkError)
{
StartCoroutine(TryConnection(index++));
}
else
{
handler.init();
}
}
}
Не забудьте переместить TryConnection туда, гдеу вас есть список доступных обработчиков.