我想了解一些(在我眼中)奇怪的行爲。我有一個調用一些異步方法,並希望檢索其結果。 (DeleteIndexAsync
返回Task<bool>
)試圖瞭解Task.ContinueWith()
var deleteTask = Task.Run(() => DeleteIndexAsync(localItem))
.ContinueWith(t =>
{
//handle and log exceptions
}, TaskContinuationOptions.OnlyOnFaulted);
if (!deleteTask.Result)
在這種情況下Result
是false
和Status
是WaitingForActivation
。
而這段代碼我想
var deleteTask = Task.Run(() => DeleteIndexAsync(localItem));
deleteTask.ContinueWith(t =>
{
//handle and log exceptions
return false;
}, TaskContinuationOptions.OnlyOnFaulted);
if (!deleteTask.Result)
有人能解釋,爲什麼呢?是否有可能在這裏使用async
/await
而不是Task
?
編輯:
var deleteTask = Task.Run(() => ThrowEx());
bool errorOccurred = false;
deleteTask.ContinueWith(t =>
{
errorOccurred = true;
}, TaskContinuationOptions.OnlyOnFaulted);
if (errorOccurred)
{
return true;
}
我想檢查task.Result以確定是否發生錯誤不是一個好主意,以及?訪問task.Result在此處引發異常...並且Faulted標誌始終爲false,即使引發異常也是如此。 – user3292642
@ user3292642我不覺得我明白嗎?你應該訪問'Exception'屬性來吞噬異常。 – slawekwin
我不想吞下異常。我已經在continuewith方法中記錄它了。日誌記錄完成後,如果發生異常,我想返回,但我不知道如何。檢查狀態不是我想的一個選項。 – user3292642