相关疑难解决方法(0)

比较线程是否相等

我正在寻找一种方法来解释通过调用ReferenceEquals()来使用高级业务逻辑是不合理的.

这是一个我遇到问题的代码片段(方法中的前置条件,如果我们在一个错误的线程上,则设计为抛出):

if (!object.ReferenceEquals(Thread.CurrentThread, RequestHandlerThread))
Run Code Online (Sandbox Code Playgroud)

写这个是可靠的:

if (Thread.CurrentThread != RequestHandlerThread)
Run Code Online (Sandbox Code Playgroud)

我建议在比较中使用ManagedThreadIds基于我在教程中常见的内容.对手说参考平等的比较看起来更像面向对象.

这是(大致)我在Reflector的.NET 4.0 System.Object视图中看到的.请记住,Thread类是密封的,并且对于operator ==没有重载.

public static bool ReferenceEquals(object objA, object objB)
{
    return (objA == objB);
}

public static bool Equals(object objA, object objB)
{
    return (objA == objB || 
        (objA != null && objB != null && objA.Equals(objB)));
}
Run Code Online (Sandbox Code Playgroud)

以下是一些基本测试,验证线程池上的操作......我是否错过了任何重要的测试?

using System.Threading;
using System.Diagnostics;
using System.Threading.Tasks;

namespace ConsoleApplicationX
{
   class Program
   {
      static readonly Thread mainThread;

      static Program()
      {
         mainThread = Thread.CurrentThread;
      }

      static void Main(string[] args)
      { …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading coding-style

2
推荐指数
1
解决办法
1964
查看次数

标签 统计

.net ×1

c# ×1

coding-style ×1

multithreading ×1