私は奇妙な行動を(私の目で)理解しようとしています。いくつかの非同期メソッドへの呼び出しがあり、その結果を取得したい。 false
でありStatus
がWaitingForActivation
である。このシナリオResult
でTask.ContinueWith()を理解しようとしています
var deleteTask = Task.Run(() => DeleteIndexAsync(localItem))
.ContinueWith(t =>
{
//handle and log exceptions
}, TaskContinuationOptions.OnlyOnFaulted);
if (!deleteTask.Result)
(Task<bool>
を返すDeleteIndexAsync
)。
このコードは、私が
var deleteTask = Task.Run(() => DeleteIndexAsync(localItem));
deleteTask.ContinueWith(t =>
{
//handle and log exceptions
return false;
}, TaskContinuationOptions.OnlyOnFaulted);
if (!deleteTask.Result)
何をしたいん一方で誰かが理由を説明できますか? Task
の代わりにasync
/await
を使用することはできますか?
編集:あなたが呼び出しをチェーンした場合
var deleteTask = Task.Run(() => ThrowEx());
bool errorOccurred = false;
deleteTask.ContinueWith(t =>
{
errorOccurred = true;
}, TaskContinuationOptions.OnlyOnFaulted);
if (errorOccurred)
{
return true;
}
私はエラーが発生したかどうかを判断するためにtask.Resultをチェックするといいと思います。タスクにアクセスする.Resultはここで例外をスローします...また、Faultedフラグは、例外がスローされた場合でも常に偽です。 – user3292642
@ user3292642私は理解しているとは思わない?例外を飲み込むには、 'Exception'プロパティにアクセスする必要があります。 – slawekwin
私は例外を飲みたくありません。私はすでにcontinuewithメソッドでそれを記録しています。ロギングが終了した後、例外がスローされた場合に戻ってきたいと思いますが、方法はわかりません。ステータスをチェックすることもオプションではありません。 – user3292642