私は、バックグラウンドでタスクを実行する拡張メソッドを持っています。それをスローする例外を処理するために、try-catchブロックに配置します。問題は、ビジュアルスタジオが常にコードの再登場部分で停止し、なぜその理由がわからないということです。リトロー例外がキャッチされない
try {
task.RunInBackground();
} catch (Exception e) {
// do something
}
私は、バックグラウンドでタスクを実行する拡張メソッドを持っています。それをスローする例外を処理するために、try-catchブロックに配置します。問題は、ビジュアルスタジオが常にコードの再登場部分で停止し、なぜその理由がわからないということです。リトロー例外がキャッチされない
try {
task.RunInBackground();
} catch (Exception e) {
// do something
}
次のようなタスク待機する必要があります。
try {
await task.RunInBackground();
} catch (Exception e) {
// do something
}
は、非同期のボイドを使用して可能な限り避けてくださいを。 async Task
以下のように置き換えることにより、async void
を削除します。
public static async Task RunInBackground(this Task task) {
// ....
}
あなたは、MSDNから非同期のボイドチェックこのlinkを避けるために、理由を知る必要がある場合。
私はちょうど火をつけて仕事を忘れたかったので、私は非同期voidを使ったのです。私がそれを待っていれば、私は待っているコール以外の何も実行しません。私の仕事は無限のwhileループで実行されます。 – Andrew
私はdforgetを起動する必要があります。次にタスクに例外をスローしましたか?例外を無視してください(これは良い考えではありません) – CodeNotFound
次の操作を行うことができます
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
task.RunInBackground().ContinueWith(t =>
{
throw t.Exception;
},
CancellationToken.None,
TaskContinuationOptions.OnlyOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext()
).ConfigureAwait(false);
例外は、そのタスクによってスローされるまで、このコードは、タスクのために停止しません。
あなたのタスクを待っているわけではありません.RunInBackgroundステートメント、try catchは無効です – Evk
これはスローされたものです – jamiedanq
あなたはそれがキャッチされていないと言っていますが、私はあなたのコードのどの部分もそれを捕まえると思うかもしれない理由は何もありません。あなたは精緻化できますか? – hvd