Я работаю в Xamarin, где у меня есть задача, которую я запускаю в первом меню, просматриваю несколько других меню и хочу дождаться ее завершения при открытии конечной страницы.Чтобы сделать это, я сохраняю задачу в статическом поле при ее запуске:
private static Task myTask;
public static void sync(User user)
{
if (myTask== null || myTask.IsCompleted) {
myTaskStarted = true;
//Note: do not trust on the variable being filled in immediately after the start of the task. It takes a minute. Use the flag
myTask= AsyncMyTask(user);
}
}
, а затем позже вызываю метод с другой страницы, который просто должен дождаться окончания выполнения myTask, вызывая myTask.Wait()
последелать некоторые проверки на MyTask, который был запущен и не является нулевымНо я вижу, что как только я вызываю myTask.Wait()
, myTask застревает и больше не прогрессирует в отладчике.Он застрял.Если я заменю myTask.Wait()
на myTask.Wait(1000)
, myTask будет заморожен на время ожидания.После таймаута это продолжается.Это не то поведение, которое описано в документации.Может кто-нибудь объяснить, почему метод AsyncMyTask блокируется при вызове myTask.Wait () из потока пользовательского интерфейса?
В соответствии с запросом: метод AwaitMyTask:
public async static Task<Boolean> AwaitMyTask()
{
if(!myTaskStarted && myTask== null)
{
return false;
} else
{
while (myTask== null)
{
Task.Delay(10);
}
}
//Stuck on the line below
myTask.Wait();
myTaskStarted = false;
return myTask.IsCompleted;
}