2012-07-18 67 views
1

當我寫了下面的代碼:爲什麼這是錯的? (C#任務ContinueWith)

Task<string> task = Task.Factory.StartNew<string>(() => "first task") 
     .ContinueWith(t => 
       { 
        Console.WriteLine(t.Result); 
        Console.WriteLine("second task"); 
       }); 

這是不對的!

然後我把它改成這樣:

var task = Task.Factory.StartNew<string>(() => "first task") 
     .ContinueWith(t => 
       { 
        Console.WriteLine(t.Result); 
        Console.WriteLine("second task"); 
       }); 

那麼一切都OK!

爲什麼?

什麼是「工作任務」和「VAR任務」之間有什麼不同?

+0

你是什麼意思,錯了,好嗎? – 2012-07-18 14:56:03

+1

考慮到'ContinueWith'不會返回一個'Task ',所以最有可能出現編譯錯誤。但如果OP已經說明了這一點,這將有所幫助。 =) – 2012-07-18 14:57:13

+0

對不起,我的英語很差 – DotDot 2012-07-18 15:28:47

回答

6

你的代碼行返回一個Task,而不是一個Task<string>對象,因爲你寫ContinueWith,不ContinueWith<string>

將來可以幫助您的提示:當您在變量聲明中將類型替換爲var時,可以將鼠標移動到Visual Studio中的var關鍵字上,彈出窗口將顯示實際類型var在代碼中隱藏了

+0

+1,如果可以的話,指出不要簡單地使用'var'作爲即燃即用設備。 – 2012-07-18 14:58:01

+0

非常想你! – DotDot 2012-07-18 15:19:58

2

task是對繼續的引用而不是原始任務(對原始任務的引用以t的形式傳遞給繼續)。

由於繼續不返回任何東西,它不是Task<string>。顯然var處理這個,這就是爲什麼你的第二個例子工作,第一個沒有。