下記の処理を、一定時間おきに実行しています。
実行時、サーバーと通信出来ていない場合、エラーを表示するのですが、
LANケーブルを抜いて実際に通信異常を起こしてみると、異常発生後の初回実行時だけ、なぜか、OnCompleted が実行されません。
2回目以降の実行時はOnCompletedが実行されてエラーが表示されます。
原因を教えて頂けないでしょうか。
C#
1//一定時間おきに実行されるタスク 2var task = new Task(() => 3{ 4 //DBからデータSELECTしてListに入れる処理。 5 try 6 { 7 using(var connection = new SqlConnection()) //接続文字列等は省略 8 { 9 try 10 { 11 //クエリ実行 12 } 13 catch 14 { 15 } 16 } 17 } 18 catch 19 { 20 } 21}); 22 23task.ConfigureAwait(true).GetAwaiter().OnCompleted(()=> 24{ 25 //DBから取得したデータのListを、GUIのComboBox等に反映する処理。 26 //データが取得出来なければエラーメッセージを表示する。 27}); 28 29task.Start();
以下の情報を質問欄を編集して追記願います。
何を作っているか (WinForms? Windows Service?)
開発環境 (OS, Visual Studio, .NET Framework のバージョン、DB サーバーは何かとそのエディション・バージョンなど)
async / await を使わない理由
何を catch しているのか
そもそものやりたいことは何か (XY 問題になっているような気がしますので教えて下さい)
そもそも、その書き方はどこを参考にしたんでしょう?TaskAwaiterはawaitの実装のためにあるものなので、直接呼ばないでください。
TaskAwaiter 構造体
https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.compilerservices.taskawaiter?view=net-5.0
> この API は製品インフラストラクチャをサポートします。コードから直接使用するものではありません。
> 注釈
> この型とそのメンバーは、コンパイラの使用のみを目的としています。
あなたの回答
tips
プレビュー