
我注意到sqlConnection有一个OpenAsync()方法,所以我想尝试等待这个.据我所知,await关键字告诉compliler检查 *** 作是否完成,如果不是,它会将其余代码转换为continuation任务.我也明白我仍然可以调试代码.但是,我遇到了一些问题.
我写了以下简单的测试代码:
Async Sub Gogo() Try Await connection1.OpenAsync() Catch ex As Exception Console.Writeline(ex) End Try SomeCode()End Sub
当我运行此代码(控制台应用程序)时会发生什么我确实得到了await语句,但没有进一步.我尝试在catch语句和try块后面的代码中设置断点.两者都没有到达,控制台应用程序只是退出.我不明白这里发生了什么.
我正在使用VS2012更新1,(VB).Net 4.5.此外,因为我怀疑发生了一些错误(这似乎没有任何意义,因为代码在我使其同步时工作)我配置了app.config来升级未观察到的异常:
<runtime> <ThrowUnobservedTaskExceptions enabled="true"/></runtime>
但是,到目前为止我没有得到任何例外.
我错过了什么?请帮忙 :)
Both are not reached,and the console application simply quits.
问题是您在控制台应用程序中使用它.如果您在windows窗体或WPF应用程序中执行相同的 *** 作,您会看到非常不同的行为.
当您调用Await时,异步 *** 作会尝试捕获调用方的同步上下文,然后继续该上下文.在控制台应用程序中,没有同步上下文(因为没有消息泵等),因此创建的continuation将在ThreadPool线程上进行调度.
启动异步 *** 作,然后继续 *** 作 – 并且控制台应用程序结束,因为它到达Main()例程的末尾,之后你永远不会“看到”这些东西.
如果您希望看到这些内容发生,您需要在控制台应用程序中添加一些内容以防止它完成.例如,您可以使用ManualresetEvent并在SomeCode()之后设置它,并在Main()例程中调用WaitOne().这将使应用程序保持活动状态,直到异步 *** 作完成.
话虽这么说,如果你想了解Async / Await,我建议在GUI应用程序中“播放”而不是控制台应用程序.当您安装了适当的同步上下文时,可以更容易地查看和了解发生的情况,这在windows窗体和WPF中会自动发生.
总结以上是内存溢出为你收集整理的vb.net – 如何调试await语句?全部内容,希望文章能够帮你解决vb.net – 如何调试await语句?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)