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

时间:2015-10-28 18:15:37

标签: c# debugging thread-safety locking assert

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

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.
}

1 个答案:

答案 0 :(得分:1)

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

Getting the thread ID