【问题标题】:When ThreadPool.QueueUserWorkItem returns false当 ThreadPool.QueueUserWorkItem 返回 false
【发布时间】:2012-11-01 19:11:48
【问题描述】:

MSDN 声明该方法返回

如果方法成功则为真 排队; NotSupportedException 是 如果工作项未排队,则抛出。

出于测试目的,如何获取返回false的方法?或者它只是一个“次优”的类设计?

【问题讨论】:

  • +1:我喜欢“次优”形容词 :)

标签: .net multithreading concurrency threadpool


【解决方案1】:

在查看 Reflector 中的源代码时,似乎代码中唯一可能返回“false”的部分是对以下内容的调用:

[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool AdjustThreadsInPool(uint QueueLength);

【讨论】:

    【解决方案2】:

    这可能是“保留以备将来使用”的情况。您可能希望将其视为失败,但很难测试。

    我几乎将此方法视为 void/Sub。

    【讨论】:

      【解决方案3】:

      可以想象,当任务并行库 (TPL) 到来时,整个 API(线程池)都会过时。

      【讨论】:

        【解决方案4】:

        如果方法成功排队,则为真;如果工作项未排队,则会引发 NotSupportedException。

        像对待 NotSupportedException 一样对待 return false

        要让它返回 false,请使用模拟方法或对象。
        您想测试您自己编写的代码,而不是底层的 Windows 代码。我敢肯定,微软已经为此进行了大量测试。

        【讨论】:

        • 异常实际上是“发明”来防止“忽略返回值”的做法。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-21
        • 1970-01-01
        • 2016-03-11
        • 2017-08-11
        • 2021-11-20
        • 2011-05-22
        • 1970-01-01
        相关资源
        最近更新 更多