質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

0回答

799閲覧

定期的に実行されるスレッド内で例外発生時、初回だけOnCompletedが実行されない。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2021/06/17 21:18

下記の処理を、一定時間おきに実行しています。

実行時、サーバーと通信出来ていない場合、エラーを表示するのですが、
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();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/17 22:05 編集

以下の情報を質問欄を編集して追記願います。 何を作っているか (WinForms? Windows Service?) 開発環境 (OS, Visual Studio, .NET Framework のバージョン、DB サーバーは何かとそのエディション・バージョンなど) async / await を使わない理由 何を catch しているのか そもそものやりたいことは何か (XY 問題になっているような気がしますので教えて下さい)
退会済みユーザー

退会済みユーザー

2021/06/18 00:04

そもそも、その書き方はどこを参考にしたんでしょう?TaskAwaiterはawaitの実装のためにあるものなので、直接呼ばないでください。 TaskAwaiter 構造体 https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.compilerservices.taskawaiter?view=net-5.0 > この API は製品インフラストラクチャをサポートします。コードから直接使用するものではありません。 > 注釈 > この型とそのメンバーは、コンパイラの使用のみを目的としています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問