C#断言正确的线程访问对象

本文关键字:线程 访问 对象 断言 | 更新日期: 2023-09-27 18:19:37

我有一系列对象,它们都是从一个线程填充的。流量控制的大部分是在所述生产者线程中执行的。在一两个地方,我从其他线程中读取数据。是否有现有的诊断工具、属性等可以用来断言创建线程是唯一一个调用某些方法的线程,以便在测试期间捕捉编程错误?我希望避免复杂的类封装来解决这个问题。

public class Datastore
{
   public Register( int id )
   {
       // must be called on producer thread - want to avoid locking 'just in case'. It is an invalid operation to be called from another thread.
   }
   public int GetTotal()
   {
       // can be called on any thread
   }
   // ... more class members, etc.
}

以上内容仅供说明。

有没有这样的属性或某种模式:

public class Datastore
{
   [AssertOnProducerThread]
   public Register( int id )
   {
   }
   public int GetTotal()
   {
   }
   // ... more class members, etc.
}

C#断言正确的线程访问对象

我不知道有什么诊断工具可以自动完成。你唯一能做的就是visual studio调试器,当你在这些函数中遇到断点时,它会显示线程id。最好对其进行编码,而不是手动检查,方法是保存threadid并将其与函数进行比较,如果为false则中断。或者,将函数中的线程ID记录到文件中,然后对日志文件进行后处理。

获取线程ID