VS 2010中的异步不起作用

时间:2013-11-01 09:52:40

标签: vb.net visual-studio-2010 async-await

我正在使用Visual Studio 2010,因此安装了Visual Studio Async CTP (Version 3)以便使用async和await。我检查了包含的样本'AsnycSamplesVB'。这些样品都很好。但是,当我复制时, 'AsyncResponsiveCPURun'进入新的控制台应用程序,它编译但只显示初始行('处理数据...')然后停止。它调用ProcessDataAsync一次但没有输出......?我有什么想法我做错了吗?这是我的控制台应用程序中的完整代码。它全部是从微软样本中复制的,除了Sub Main中的调用:

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

1 个答案:

答案 0 :(得分:2)

Async / Await FAQ on MSDN找到答案:

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

我可以在控制台应用中使用“await”吗?

     

不确定。但是,您不能在Main方法中使用“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);
}