method A()
{
try
{
Thread t = new Thread(new ThreadStart(B));
t.Start();
}
catch(exception e)
{
//show message of exception
}
}
method B()
{
// getDBQuery
}
B の例外ですが、キャッチされません。.netで合法ですか?
method A()
{
try
{
Thread t = new Thread(new ThreadStart(B));
t.Start();
}
catch(exception e)
{
//show message of exception
}
}
method B()
{
// getDBQuery
}
B の例外ですが、キャッチされません。.netで合法ですか?
正しい、スレッドからの例外は呼び出し元に転送されません。スレッドはこれを単独で処理する必要があります。
最も一般的な答えは、ここでは (裸の) スレッドを使用すべきではないということです。それは効率的ではなく、便利ではありません。
Taskを使用すると、例外が保存され、calWait()
またはを呼び出すときに発生しますResult
。
A
実行が終了しB
ても、独立したスレッド上でそのまま実行されている可能性があります。そのため、原則として、発生するA
すべての例外をキャッチすることはできませんB
。
try-catch を の中に移動しB
ます。クラスはThread
例外を転送しません。
さらに良いTask
ことに、例外の伝播と検査を可能にする which を使用してください。