2013-10-13 97 views
1

我有一個像下面執行的任務與Task.WaitAll掛在C#

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掛起永遠一類!

是什麼問題?

回答

8

它會掛起,因爲您從未開始任務。所以WaitAll正在等待他們到完成,他們永遠不會因爲他們從未開始。

如果您查看Task.WaitAll的doco,您會看到StartNew()用於已創建的任務 - 這既創建任務,又開始任務。

+0

對於'async' /'await'你應該使用'Task.Run'。 –

2

這應該工作:

public class ImageUploader 
{ 
    .... 

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

      return UploadedFilePath; 
     }); 
    } 
    .... 
} 
相關問題