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