此主题尚未评级 - 评价此主题

SemaphoreFullException 类

2013/3/11

对计数已达到最大值的信号量调用 Semaphore.Release 方法时引发的异常。

System.Object
  System.Exception
    System.SystemException
      System.Threading.SemaphoreFullException

Namespace:  System.Threading
程序集:  mscorlib(位于 mscorlib.dll 中)
public class SemaphoreFullException : SystemException

SemaphoreFullException 类型公开以下成员。

  名称说明
公共方法SemaphoreFullException()使用默认值初始化 SemaphoreFullException 类的新实例。
公共方法SemaphoreFullException(String)使用指定错误消息初始化 SemaphoreFullException 类的新实例。
公共方法SemaphoreFullException(String, Exception)使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 SemaphoreFullException 类的新实例。
返回顶部
  名称说明
公共属性Data获取一个提供用户定义的其他异常信息的键/值对的集合。 (从 Exception 继承。)
公共属性HelpLink获取或设置指向此异常所关联帮助文件的链接。 (从 Exception 继承。)
公共属性HResult获取或设置 HRESULT(一个分配给特定异常的编码数字值)。 (从 Exception 继承。)
公共属性InnerException获取导致当前异常的 Exception 实例。 (从 Exception 继承。)
公共属性Message获取描述当前异常的消息。 (从 Exception 继承。)
公共属性Source获取或设置导致错误的应用程序或对象的名称。 (从 Exception 继承。)
公共属性StackTrace获取在引发当前异常时调用堆栈上帧的字符串表示形式。 (从 Exception 继承。)
返回顶部
  名称说明
公共方法Equals(Object)确定指定的 Object 是否等于当前的 Object (从 Object 继承。)
受保护的方法Finalize允许 Object 在垃圾回收器回收该对象之前尝试释放资源并执行其他清理操作。 (从 Object 继承。)
公共方法GetBaseException当在派生类中重写时,返回 Exception,它是一个或多个并发的异常的根源。 (从 Exception 继承。)
公共方法GetHashCode用作特定类型的哈希函数。 (从 Object 继承。)
公共方法GetType获取当前实例的运行时类型。 (从 Exception 继承。)
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (从 Object 继承。)
公共方法ToString创建并返回当前异常的字符串表示形式。 (从 Exception 继承。)
返回顶部

信号量的计数在每次线程进入信号量时减小,在线程释放信号量时增加。当计数为零时,后面的请求将被阻塞,直到有其他线程释放信号量。当所有的线程都已释放信号量时,计数达到创建信号量时所指定的最大值。如果编程错误导致线程在此时调用 Semaphore.Release 方法,将引发 SemaphoreFullException

说明注意:

Semaphore 类对 WaitHandle.WaitOneSemaphore.Release 方法调用不强制线程标识。调用过 WaitOne 的线程不需要调用 Release

SemaphoreFullException 不一定表示发生异常的代码有问题。请考虑下列情形:线程 A 和线程 B 进入一个最大计数值为 2 的信号量。线程 B 的编程错误导致其调用两次 Release,从而使该信号量的计数已满。因此,当线程 A 最终调用 Release 时,引发了 SemaphoreFullException

有关 SemaphoreFullException 类的实例的初始属性值列表,请参见 SemaphoreFullException() 构造函数。

下面的代码示例演示了一个线程中的编码错误如何导致另一个线程中发生 SemaphoreFullException:两个线程进入一个信号量。第二个线程两次释放该信号量,而第一个线程仍在执行其任务。当第一个线程完成并释放该信号量时,信号量计数已满并引发异常。

Windows Phone OS

受以下版本支持: 8.0
此类型的所有公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

本文是否对您有所帮助?
(1500 个剩余字符)
© 2013 Microsoft. 版权所有。