使用C#中的Task.WaitAll挂起任务执行

Mil*_*ahi 1 c# asp.net asynchronous .net-4.5

我有一个类似下面的课程

public class ImageUploader
{
   ....

   public Task<string> Upload()
   {
      return new Task<string>(
                () =>
                    {
                        ....

                        return UploadedFilePath;
                    }
            );
   }
   ....
}
Run Code Online (Sandbox Code Playgroud)

然后我就像这样使用它

var uploadIcon = new ImageUploader();
var uploadLogo = new ImageUploader();

var uploadIconTask = uploadIcon.Upload();
var uploadLogoTask = uploadLogo.Upload();

Task.WaitAll(uploadIconTask, uploadLogoTask); // never returns
Run Code Online (Sandbox Code Playgroud)

和Task.WaitAll永远挂起!

问题是什么?!

slu*_*ter 8

它挂起是因为你从未开始任务.所以WaitAll等待他们完成,他们永远不会,因为他们从未开始.

如果您查看Task.WaitAll的doco,您将看到StartNew()用于创建的任务 - 这将创建并启动任务.