我在Xamarin工作,我有一个任务,我从第一个menupage开始,经历其他几个menupages,然后想要在打开endpage时等待它完成。为此,我在启动时将任务保存在静态字段中:
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进行了一些检查并且不是null之后调用myTask.Wait()
,等待myTask进行芬兰语。但是我看到,一旦我调用myTask.Wait()
myTask被卡住,调试器就不再进展了。它被困住了。如果我将myTask.Wait()
替换为myTask.Wait(1000)
myTask在超时期间被冻结。超时后继续。这不是文档中描述的行为。任何人都可以解释为什么从UI线程调用myTask.Wait()时会阻止AsyncMyTask方法吗?
根据要求: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;
}
答案 0 :(得分:1)
Task.Wait
是一个同步等待阻塞线程的任务。除非您可以指出说明其他内容的文档,否则我会说https://msdn.microsoft.com/en-us/library/dd235635(v=vs.110).aspx
Wait是一种同步方法,它使调用线程等到当前任务完成。 ...