是什么让IsFaulted假?

时间:2014-02-04 18:59:50

标签: c# .net task-parallel-library

我知道IsFaulted是只能与Get一起使用的属性以及它的用途,但是我很难理解它是否以及何时从true变为false。我在网上看到的大多数网站都会讨论它的用途,也许会对它进行检查,但我不认为它们会故意或通过某种方式改变它。

2 个答案:

答案 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的任何人,都能看到你希望他们看到的东西。