1

我有一个像下面这样的课

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 永远挂起!

问题是什么?!

4

2 回答 2

8

它挂起是因为您从未启动过任务。WaitAll等待他们完成也是如此,他们永远不会这样做,因为他们从未开始。

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

于 2013-10-13T06:46:06.650 回答
2

这应该有效:

public class ImageUploader
{
    ....

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

            return UploadedFilePath;
        });
    }
    ....
}
于 2013-10-13T06:57:53.363 回答