gpt4 book ai didi

c# - Task.ContinueWith 和 .wait()。对象处置异常?

转载 作者:太空宇宙 更新时间:2023-11-03 22:06:44 24 4
gpt4 key购买 nike

我在 C# 中使用包含任务的模式

Task.Factory.StartNew( .something... )
.ContinueWith(t=> {
try{ t.Wait() }
catch(Exception ex) ...
});

如果 something 例如包括 WCF 代码或其他异常抛出的东西。这样我就可以确定任务已经等待我不会得到那些终结器异常并且我可以始终如一地记录错误消息。

最近我看到 t.Wait() 抛出 ObjectDisposed 异常。我的模式是错误的还是应该只在 TaskContinuationOptions.NotOnRanToCompletion 上继续。

最佳答案

如果 continuation 正在触发,很明显它已经完成(不管怎样);没有必要在已经完成的事情上 Wait()。只需检查 它是如何完成的(完成、取消 (.IsCanceled)、异常 (.IsFaulted)),然后访问结果 ( .Result) 如果合适的话。

ObjectDisposedException 听起来像是臭名昭著的 WCF“功能”,WCF 中的 Dispose() 可以抛出上述异常(这很烦人)。提出了多种方法来包装 WCF 来处理此问题,但这与任务 API 无关。 WCF 因此吞下了实际 错误,并显示了ObjectDisposedException。有几个 stackoverflow 问题可以解决这个问题。

关于c# - Task.ContinueWith 和 .wait()。对象处置异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8179569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com