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

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

新規登録して質問してみよう
ただいま回答率
86.02%
.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

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

Q&A

解決済

謎の例外対処について

Reindeer_Csharp
Reindeer_Csharp

総合スコア13

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

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

2回答

0グッド

0クリップ

505閲覧

投稿2022/11/17 08:32

編集2022/11/17 08:40

前提

深層学習ソフトを組み上げている途中です。
ビルドしている間に変な例外が出てしまって困っています。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • 例外の原因と対処法を確認する。

発生している問題・エラーメッセージ

System.OperationCanceledException HResult=0x8013153B Message=操作は取り消されました。 Source=mscorlib スタック トレース: 場所 System.Threading.CancellationToken.ThrowOperationCanceledException() (f:\dd\ndp\clr\src\BCL\system\threading\CancellationToken.cs):行 482

該当のソースコード

例外はこのコードの他にも多数確認しました。

C#

1static void CreateThread() 2 { 3 // Create a new background thread to run the work. 4 var t = new Thread(() => 5 { 6 // Repeatedly get the next item and invoke it, setting its TCS when we're done. 7 // This will wait for up to the idle time before giving up and exiting. 8 while (TryDequeue(out (Delegate action, object state, TaskCompletionSource<bool> tcs) item)) 9 { 10 try 11 { 12 if (item.action is Action<object> pts) 13 { 14 pts(item.state); 15 } 16 else 17 { 18 ((Action)item.action)();//ここで例外発生。 19 } 20 } 21 finally 22 { 23 item.tcs.SetResult(true); 24 } 25 } 26 }); 27 t.IsBackground = true; 28 t.Start(); 29 } 30

他DLL内での例外発生なので事前コードが必要...?
そもそもこの例外が大量に起きている時点でDLL自体がおかしい?

試したこと

DLLの再確認、再インストールなどを行いました。
といっても原因の詳細がなければどこを直せばいいのかわからずじまいです。

補足情報(FW/ツールのバージョンなど)

Windowsプラットフォーム(.net)
VisualStudio2022 C# 最新版

x64でのビルドです

###追記情報
2022/11/17 17:33 ビルド環境の追記をしました(x64)
2022/11/17 17:40 コード修正、追記を行いました。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

SurferOnWww

2022/11/17 22:32

質問者さん、無言ですが、回答したのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。
Reindeer_Csharp

2022/11/17 23:38

すみません、プロフィールにも書いてある通り仕事の都合上08:30~17:40までしか対応できないです。 説明不足で申し訳ございません。
SurferOnWww

2022/11/18 00:01

> 仕事の都合上08:30~17:40までしか対応できないです。 失礼しました。プロフィールは見てませんでした。質問欄にも書いていただけると有難いです。

回答2

1

ベストアンサー

例外の OperationCanceledException とコードのコメント "This will wait for up to the idle time before giving up and exiting" から想像するに、the idle time が過ぎたので OperationCanceledException をスローして処理を中断したのだと思います。

ちなみに、コードのコメント "setting its TCS" の TCS とは CancellationTokenSource オブジェクトのことでしょう。

CancellationTokenSource クラス
https://learn.microsoft.com/ja-jp/dotnet/api/system.threading.cancellationtokensource?view=netframework-4.8

以下のコードは cts.CancelAfter(5000); でタイムアウトを 5 秒に設定していて、5 秒待っても処理が終わらなかったら OperationCanceledException が自動的にスローされるのでそれでキャンセルしています。似たような話だと思います。

C#

1public async Task<ActionResult> VerifyName(string name) 2{ 3 try 4 { 5 using (var cts = new CancellationTokenSource()) 6 { 7 // 5 秒でタイムアウトに設定 8 cts.CancelAfter(5000); 9 CancellationToken token = cts.Token; 10 11 Products product = await db.Products 12 .FirstOrDefaultAsync(m => m.ProductName == name, 13 token); 14 15 // 応答に時間がかかる時どうなるかの検証用。 16 await Task.Delay(10000, token); 17 18 // 以下は無くても上の Task.Delay でタイムアウトして 19 // OperationCanceledException がスローされる 20 token.ThrowIfCancellationRequested(); 21 22 if (product != null) 23 { 24 return Json($"品名 {name} は重複しています", 25 JsonRequestBehavior.AllowGet); 26 } 27 } 28 } 29 catch (OperationCanceledException) 30 { 31 return Json("タイムアウトで検証失敗", 32 JsonRequestBehavior.AllowGet); 33 } 34 catch(Exception) 35 { 36 return Json("サーバーエラーで検証失敗", 37 JsonRequestBehavior.AllowGet); 38 } 39 40 return Json(true, JsonRequestBehavior.AllowGet); 41}

上のコードのように OperationCanceledException を catch して適切な処理を行えばいいのではないでしょうか。

投稿2022/11/17 09:03

編集2022/11/17 09:18
SurferOnWww

総合スコア17434

Reindeer_Csharp👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Reindeer_Csharp

2022/11/17 23:43

なるほど...!たしかにAI学習のタイムアウトなら納得できます!  コーディングしてみます!
Reindeer_Csharp

2022/11/17 23:49

コーディングしつつ色々いじってみたら解決しました。 ありがとうございます!

0

なるほど...!たしかにAI学習のタイムアウトなら納得できます! 
コーディングしてみます!

記入ミスです。

投稿2022/11/17 23:19

編集2022/11/18 00:10
Reindeer_Csharp

総合スコア13

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

2022/11/17 23:59依頼された後にこの回答は修正されています

こちらの回答が他のユーザーから「質問に対する回答となっていない投稿」という指摘を受けました。

回答へのコメント

SurferOnWww

2022/11/18 00:04

私の回答に対するコメントは、私の解答欄下のコメント欄に書いてください。
Reindeer_Csharp

2022/11/18 00:09

記入ミスをしてしまいました。削除リクエストを申請しています。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

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