我需要使现有的应用程序线程安全。由于情况(见下文),我决定为整个业务对象图使用一个 ReaderWriterLock。所有方法/属性必须如下所示:
public int MyReadOperation(string inputParam)
{
rwLock.AcquireReaderLock(10000);
try
{
// do all read operations
...
}
finally
{
rwLock.ReleaseReaderLock();
}
}
public void MyWriteOperation(string input)
{
rwLock.AcquireWriterLock(10000);
try
{
// do all write operations
...
}
finally
{
rwLock.ReleaseWriterLock();
}
}
但是我有大量的方法可以覆盖,我被复制/粘贴的想法吓坏了。受 MethodImplAttribute 的启发,我希望有这样的代码,而其行为与上面的代码一样:
[ReadOperation]
public int MyReadOperation(string inputParam)
{
// do all read operations
...
}
[WriteOperation]
public void MyWriteOperation(string input)
{
// do all write operations
...
}
有没有办法在进入属性或方法并添加线程安全预防措施之前/之后中断线程执行?或者以某种方式利用 C# 的函数式语言特性,将方法的生产主体嵌入到获取“框架”的通用 ReaderWriterLock 中?
一点背景:
我正在开发一个通过 .NET Remoting 公开数据载体业务对象的项目。但是,这些数据类不是可序列化的,而是 MarshalByRef-s。这意味着所有客户端实际上读/写完全相同的业务对象。这是无法改变的,它是刻在石头上的。线程安全的希望是这些远程业务对象在远程客户端的眼中是只读的(认为它们确实循环了许多列表)并且所有写入操作都很好地分离到一个专用的外观中。我期待罕见的写入和频繁的读取。业务对象高度连接,它们非常“图形化”。