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

C# Assert correct thread accessing object

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

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

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

Getting the thread ID