我知道IsFaulted是只能与Get一起使用的属性以及它的用途,但是我很难理解它是否以及何时从true变为false。我在网上看到的大多数网站都会讨论它的用途,也许会对它进行检查,但我不认为它们会故意或通过某种方式改变它。
答案 0 :(得分:3)
我想你在谈论Task.IsFaulted
。
如果在执行任务期间存在无法处理的异常,则会更改为true
。它的状态取决于内部设置的状态标志。
您可以从IsFaulted
的代码中看到没有setter:
public bool IsFaulted
{
get
{
// Faulted is "king" -- if that bit is present (regardless of other bits), we are faulted.
return ((m_stateFlags & TASK_STATE_FAULTED) != 0);
}
}
答案 1 :(得分:0)
首次完成任务时设置。如果您想在任务完成时执行某些代码(或者在任务完成后立即运行),您可以在ContinueWith
上调用Task
。您将知道此时将设置IsFaulted
。
至于设置它的内容,这完全取决于生成任务的内容。使用任务的重点是,作为Task
的消费者,您不需要知道或关心它是如何设置的。只需添加续集,您就可以清楚地看到任务是否成功完成。
如果你有另一项任务,你不应该试图找到某种方式将其标记为出现故障,但 可以做的是提供基于另一项任务的新任务,但这会以某种方式改变其结果。通常您会使用ContinueWith
来执行此操作。例如,您可以为任务编写一个延续,如果结果是您认为无效的某个值,则抛出异常,否则只返回结果。然后,无论你通过Task
的任何人,都能看到你希望他们看到的东西。