2012-03-02 130 views
1

我添加了AsyncCtpLibrary v.3。從異步網頁抓取了一些示例代碼。將它包裝在TestFixture中以供玩耍。異步等待關鍵字錯誤

我收到錯誤:任何想法爲什麼?

錯誤1 - 無效的標記 '無效' 類,結構或接口成員聲明

錯誤2 - ;預計

代碼:

[TestFixture] 
public class AsyncTests 
{ 
    [Test] 
    public async void AsyncRunCpu() 
    { 
     Console.WriteLine("On the UI thread."); 

     int result = await TaskEx.Run(
      () => 
       { 
        Console.WriteLine("Starting CPU-intensive work on background thread..."); 
        int work = DoCpuIntensiveWork(); 
        Console.WriteLine("Done with CPU-intensive work!"); 
        return work; 
       }); 

     Console.WriteLine("Back on the UI thread. Result is {0}.", result); 
    } 

    public int DoCpuIntensiveWork() 
    { 
     // Simulate some CPU-bound work on the background thread: 
     Thread.Sleep(5000); 
     return 123; 
    } 
} 
+0

我假設你的意思是你使用VS11作爲異步/等待關鍵字。不知道它是否會有很大的不同,但嘗試新的Task.Factory.StartNew。在運行命令之後嘗試添加.Result。 .Result是任務返回類型,在本例中爲int – Jon 2012-03-02 20:33:19

+1

檢查「My Documents」下是否有Async CTP文件夾。異步CTP [在論壇上討論](http://social.msdn.microsoft.com/Forums/en-US/async/threads)有許多安裝問題。歸結起來,異步CTP是一種帶外更新,會干擾其他VS更新。在這一點上(VS11迫在眉睫),我認爲他們不太可能修復安裝程序。一旦VS11發佈,我預計Async CTP將被拉出並且不再可用。 – 2012-03-03 00:44:24

回答

0

我認爲它應該是:

[Test] 
public async Task AsyncRunCpu() 
{ 
    // ... 
} 

爲據我所知,使用void返回類型的異步方法在某種程度上是特別的 - 想知道爲什麼編譯器不會爲這種情況發出警告...

順便說一句,您可以使用async/await與.NET4 .0,只需在項目中添加對Microsoft.BCL.Async的引用即可。唯一的區別是某些Task相關功能位於TaskEx類型中。

4

你不能簡單地將.dll添加到您的項目,它的工作:異步CTP擴展了C#語言的語法,「正常」的編譯器不理解新的關鍵字,即使所需的運行時程序集存在。您需要使用官方安裝程序進行安裝。 (注:卸載自上次服務包,首先Visual Studio的更新,或者安裝將不會成功,您可以重新安裝更新之後。)

+1

爲什麼在VS11 beta現在可用時使用異步CTP,並且可能不會影響VS10的安裝? – 2012-03-02 20:39:41

+0

@JonSkeet沒有異步CTP,運行時需要.NET 4.5,對吧?這不一定是壞事,但要牢記。 – hvd 2012-03-02 20:47:57

+0

我暫時不會親自使用Async CTP進行製作 - 這裏有太多的陷阱。相反,我肯定只會使用測試版。 – 2012-03-02 20:53:29