任务的Wait()方法会破坏任务

时间:2018-05-22 13:49:48

标签: c# xamarin task

我在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;
    }

1 个答案:

答案 0 :(得分:1)

Task.Wait是一个同步等待阻塞线程的任务。除非您可以指出说明其他内容的文档,否则我会说https://msdn.microsoft.com/en-us/library/dd235635(v=vs.110).aspx

中描述的预期行为
  

Wait是一种同步方法,它使调用线程等到当前任务完成。 ...