异步方法似乎未异步运行C#

时间:2019-03-14 03:46:26

标签: c# asynchronous task

以下看似简单的情况导致我出现问题:

    private List<Task> _Tasks = new List<Task>();
    void someMethod() {
      //stuff

      prepareWork();
      Task.WaitAll(_Tasks.ToArray());

      //do more stuff
    }

    private void prepareWork() {
      for (int i = 0; i < 2; ++i) {
         _Tasks.Add(someWork());
         //_Tasks.Add(Task.Run(() => someWork())); //<---- This does work
      }
    }

    private async Task someWork() {
      Thread.Sleep(2000);
    }

我希望someWork()可以异步运行,但事实并非如此。当我用下面的注释行替换_Tasks.Add(someWork());行时,情况就是这样。在我看来,我缺少有关C#/ async方式的一些基本知识,我将不胜感激。

1 个答案:

答案 0 :(得分:-1)

  

这不是答案(部分不正确),但在下面由Peter留下的评论中添加了一个   有效且被忽略的点。

     

如果Peter可以回答问题,则会删除

添加任务时,您刚刚创建了要完成的工作。但是您注意到它尚未开始。

_Tasks.Add(someWork());

要运行任何任务,您必须调用其start方法,要运行列表中的所有任务,您可以启动它们,然后等待完成所有工作。

_task.ForEach(t=>t.Start());