我想了解一些(在我眼中)奇怪的行为。我有一个调用一些异步方法,并希望检索其结果。 (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