等待不调用我的方法,它永远不会返回

Adi*_*ana 2 .net c# task-parallel-library async-await c#-5.0

我有以下使用async await的代码.

    private async void DoAction()
    {
        foreach (var ele in new int[] { 1, 2, 3, 4, 5 })
        {
            int i = await LoadAction();
        }
    }

    private Task<int> LoadAction()
    {
        Task<int> task = new Task<int>(CalledFromAsync);
        return task;
    }

    private int CalledFromAsync()
    {
        Thread.Sleep(2000);
        return rand.Next();
    }
Run Code Online (Sandbox Code Playgroud)

永远不会调用我的CalledFromAsync().我在这里做错了吗?请帮我.

Mar*_*ell 6

您正在返回一个永远不会开始的任务.它永远不会完成并不是一个巨大的惊喜.您需要使用它task.Start();来启动任务,或任何其他工厂方法Task.Run.

  • @Adinarayana不,`await`是一种在任务完成后返回到一行代码并且可选地使用相同的`SynchronizationContext`的机制,它与启动它等待完成的任务无关. (2认同)
  • @Adinarayana重要:`await`不"等待"; 它安排一些*作为延续*,当它*完成时完成' (2认同)