2011-09-27 41 views
7

新的異步功能,我從here試圖瞭解在C#

我見過很多類似的例子複製這個例子。他們中的大多數人表示他們正在使用Async CTP。我在Windows 8上使用Visual Studio 11,但不適用。如圖所示,錯誤說TaskEx不存在。我想我錯過了一個參考,但不知道哪一個。

此頁面爲http://users.zoominternet.net/~charleswatson/pic.png

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static Random rnd = new Random(); 

     static void Main(string[] args) 
     { 
      //Do some other heavy duty background task in this thread 
      StartHotel(); 
      Console.WriteLine("StartHotel called.."); 
      Console.ReadLine(); 

     } 

     static void StartHotel() 
     { 
      Console.WriteLine("Starting Hotel.."); 

      for (int i = 0; i < 10; i++) 
      { 
       string name = "Chef" + i; 
       CookDish(name, "Dish" + i); 
       Console.WriteLine("Asked {0} to start cooking at {1}", name, DateTime.Now.ToString()); 
      } 
     } 

     static async void CookDish(string chefName, string dish) 
     { 
      //Induce a random delay 
      int delay = rnd.Next(1000, 4000); 
      //Cook is cooking - Task 
      await TaskEx.Delay(delay); 
      //Write the result - StuffAfterAwait 
      Console.WriteLine("Chef {0} Finished at {1}", chefName, DateTime.Now.ToString()); 
     } 
    } 
} 
+1

只需右鍵單擊 - >打開。圖片通過css縮小。 – Femaref

+0

@Femaref:啊,完美。謝謝 –

+0

只需點擊示例鏈接 –

回答

12

在CTP我們無法使我們做的事情務實和剛拍完一部新TaskEx類型的新功能添加到Task類型。在最終版本中不會有這種類型;這些方法只會在你想象的Task上。

+3

此外,在當前VS2011開發預覽中,方法*在*任務類型(如果您的目標是Metro或.NET 4.5)*上。 –

2

TaskEx替換爲Task。在cs文件的頂部,你將需要:

using System.Threading.Tasks; 

大部分示例代碼我見過指TaskEx,而難能可貴的利珀特先生似乎表明這是其發展的一個神器處理。如果您使用的是開發人員預覽版,則類似Run,WhenAll和Delay的調用已經是類Task而非TaskEx的方法。發佈工具應該是一樣的。