我有一个像下面这样的课程

public class ImageUploader
{
   ....

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

                        return UploadedFilePath;
                    }
            );
   }
   ....
}


然后我就这样使用它

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

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

Task.WaitAll(uploadIconTask, uploadLogoTask); // never returns


和Task.WaitAll永远挂起!

问题是什么?!

最佳答案

它挂起,因为您从未启动任务。所以WaitAll等待他们完成,因为他们从未开始,所以他们永远不会。

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

关于c# - C#中的Task.WaitAll挂起了任务的执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19342562/

10-09 18:20