2013-11-01 87 views
0

我正在使用Visual Studio 2010,因此安裝了Visual Studio Async CTP (Version 3)以便使用異步並等待。我已經檢查了包含的樣本'AsnycSamplesVB'。這些樣本一切正常。但是當我複製例如'AsyncResponsiveCPURun'到一個新的控制檯應用程序中,它編譯但只顯示最初的行('Processing data ...'),然後停止。它調用ProcessDataAsync一次,但沒有輸出...?任何想法我做錯了什麼?這是我的控制檯應用程序中的完整代碼。這一切都來自微軟的樣品複製,除了在子主召喚:VS 2010中的異步不起作用

Module Module1 

Sub Main() 
    AsyncResponsiveCPURun() 
End Sub 

Public Async Function AsyncResponsiveCPURun() As Threading.Tasks.Task 
    Console.WriteLine("Processing data... Drag the window around or scroll the tree!") 
    Console.WriteLine() 
    Dim data As Integer() = Await ProcessDataAsync(GetData(), 16, 16) 
    Console.WriteLine() 
    Console.WriteLine("Processing complete.") 
End Function 


Public Function ProcessDataAsync(ByVal data As Byte(), ByVal width As Integer, ByVal height As Integer) As Threading.Tasks.Task(Of Integer()) 
    Return Threading.Tasks.TaskEx.Run(
     Function() 
      Dim result(width * height) As Integer 
      For y As Integer = 0 To height - 1 
       For x As Integer = 0 To width - 1 
        Threading.Thread.Sleep(10) ' simulate processing cell [x,y] 
       Next 
       Console.WriteLine("Processed row {0}", y) 
      Next 
      Return result 
     End Function) 
End Function 
Public Function GetData() As Byte() 
    Dim bytes(0 To 255) As Byte 
    Return bytes 
End Function 
End Module 
+4

您不應該再使用CTP。 CTP需要更新/修補編譯器,因此需要匹配正確的版本,VS的任何更新都可能會破壞ctp。更好地切換到支持異步/等待的VS2012,並通過FW4.0目標包支持FW4.0。 – igrimpe

+0

是的,這可能是最好的選擇。我會很快做到的。謝謝! – K232

回答

2

找到在Async/Await FAQ on MSDN答案:

Sub Main() 
    AsyncResponsiveCPURun().Wait() 
End Sub 

我可以在控制檯應用程序使用「等待」?

當然。但是,您不能在Main方法內使用「await」,因爲 入口點不能標記爲異步。相反,您可以在控制檯應用程序中使用 其他方法中的「await」,然後如果您從Main調用 這些方法,則可以同步等待(而不是異步 等待)以完成它們。

public static void Main() 
{ 
    FooAsync().Wait(); 
} 

private static async Task FooAsync() 
{ 
    await Task.Delay(1000); 
    Console.WriteLine(「Done with first delay」); 
    await Task.Delay(1000); 
}