C# 屏障超时

Posted

技术标签:

【中文标题】C# 屏障超时【英文标题】:C# Barrier timeout 【发布时间】:2018-08-25 20:47:48 【问题描述】:

我正在并行运行一些任务,通常一次运行 4 个。对于一个测试,我需要一个屏障,因此它们在那时是同步的。

然后将屏障配置为new Barrier(4);。问题是有时可能会发生异常,这可能导致任务在某个点停止并且不再到达 Barrier。

这会使屏障永远等待,我该如何解决? 是否可以配置一个 Timeout 来释放障碍,并测试已经到达的障碍直到那一刻?

This question is related to this post

【问题讨论】:

问题不是障碍,而是您的代码没有正确处理异常。您实际上可以处理它的可能性并不好,请确保您的程序大声轰炸。 【参考方案1】:

如果我理解正确,即使第 4 个任务失败,您也希望 3 个任务继续。在这种情况下,您可以使用SignalAndWait(Int32) 过载来仅在指定的时间段内等待其他参与者。

【讨论】:

Ups...我应该看过这个,我想我没有与名字相关联,谢谢。稍后我会测试并接受 @miguelmpn 当然。此外,如果它不是一些辅助代码,而是一个产品,那么提供适当的异常处理可能是一种更好的方法,然后将障碍留给超时。 这是一个项目,我知道根本原因,但我必须让它快速工作,然后我将有时间整理任何剩余的异常并处理它们。无论哪种方式,无论是否处理任务中的错误,在我的情况下,该过程都无法继续,因此无论如何我最终都会这样做。谢谢你的建议。

以上是关于C# 屏障超时的主要内容,如果未能解决你的问题,请参考以下文章

C# UdpClient 设置超时时间

实现 C# 通用超时

《CLR via C#》之线程处理——协作式取消和超时

c# socket 链接超时时间设置

HttpWebRequest 超时(被阻塞) c#

Selenium WebDriver - 如何使用 C# 设置页面加载超时