最近、TPLと非同期パターンに関するいくつかのプレゼンテーションを見たので、いくつかのことを試すために小さなペットプロジェクトを開始しました。(非同期と並列の両方)
SqlConnectionにOpenAsync()メソッドがあることに気付いたので、これを待ってみたかったのです。私が理解しているように、awaitキーワードは、操作が終了したかどうかを確認するようにコンパイラーに指示し、終了していない場合は、残りのコードを継続タスクに変換します。また、コードをデバッグできるはずであることも理解しました。しかし、私はこれに関していくつかの問題を抱えています。
次の簡単なテストコードを作成しました。
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).Net4.5を使用しています。また、何らかのエラーが発生したと思われるため(同期させるとコードが機能するため、実際には意味がないようです)、監視されない例外をエスカレートするようにapp.configを構成しました。
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
しかし、今のところ例外はありません。私は何が欠けていますか?助けてください :)