C# 我是否需要观察TaskCompletionSource创建的任务的Exception属性?

C# 我是否需要观察TaskCompletionSource创建的任务的Exception属性?,c#,task,taskcompletionsource,C#,Task,Taskcompletionsource,假设我有一个TaskCompletionSource,其中我通过SetException(exception)显式设置了它的异常。是否仍需要访问其任务的Exception属性以避免 通过等待任务或访问其exception属性未观察到任务的异常。因此,终结器线程重新捕获了未观察到的异常 消息 具体示例: try { ThreadEnd(); _disposeCompletionSource.SetResult(42); } catch (Exception e) { Log

假设我有一个TaskCompletionSource,其中我通过SetException(exception)显式设置了它的异常。是否仍需要访问其任务的Exception属性以避免

通过等待任务或访问其exception属性未观察到任务的异常。因此,终结器线程重新捕获了未观察到的异常

消息

具体示例:

try
{
    ThreadEnd();
    _disposeCompletionSource.SetResult(42);
}
catch (Exception e)
{
    Log.FatalFormat("Caught unexpected exception while shutting down thread {0}:\n{1}", _thread.Name, e);
    _disposeCompletionSource.SetException(e);
}

我需要继续()该任务以避免在终结器线程上重新引发异常,还是我很好?

使用
TaskCompletionSource
与此有什么关系?使用
\u disposeCompletionSource.Task
的人必须完成这项工作,这一点无论
任务
来自何处都是正确的(这是一个实现细节)。在这方面,
TaskCompletionSource
没有什么特别之处。(所以对你的问题的简短回答是“是的”。不能保证您在任何情况下都能收到该消息,不收到该消息并不意味着您的代码没有bug。我之所以提到这一点,是因为您似乎认为避免消息是目标——目标应该是避免消息暗示的问题(未观察到的异常,例如,没有人有意识地选择在异常发生时应该发生什么)。谢谢您的回答。您是对的,使用TaskCompletionSource与问题完全无关。我之所以问这个问题,是因为这段代码与清理代码有关——当这段代码失败时,应用程序除了记录异常之外,实际上做不了什么。如果这是清理代码,为什么任务会有结果?如果它有一个结果,一定有人在观察该结果(该代码也会观察异常)。如果没有结果,则记录异常并由此考虑它被处理(并且简单地将任务标记为已完成)是正确的。(如果您只是使用一个结果,因为
TaskCompletionSource
就是这样滚动的:那么也只需在异常处理程序中使用一个虚拟结果即可。)您是对的,设置异常确实没有意义,我将更改它。谢谢