相关疑难解决方法(0)

在异步方法中使用ReaderWriterLockSlim是否安全

由于ReaderWriterLockSlim该类使用线程ID来查看谁拥有该锁是否可以安全地使用异步方法,其中没有保证所有方法将在同一线程上执行.

例如.

    System.Threading.ReaderWriterLockSlim readerwriterlock = new System.Threading.ReaderWriterLockSlim();
    private async Task Test()
    {
        readerwriterlock.EnterWriteLock();
        await Task.Yield(); //do work that could yield the task
        readerwriterlock.ExitWriteLock(); //potentailly exit the lock on a different thread
    }
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading

23
推荐指数
2
解决办法
4436
查看次数

写锁定被释放而不被保持

我有一种情况,ReadWriterLockSlim抛出异常"System.Threading.SynchronizationLockException - 写锁定被释放而不被保留." 当我尝试执行ExitWriteLock()时.据我所知,这不应该发生,因为进入try块的后续线程将"阻塞"直到他们可以获得锁定.我在这里错过了什么吗?

该问题与问题非常相似,但没有找到解决方案.

//Code simplified for example. 

public class i18nService {
    internal static ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);

    private string ProcessText()
    {
        try {
            cacheLock.EnterWriteLock();
            return "xyz";
        }
        finally {
            cacheLock.ExitWriteLock(); // Error is throwing here. 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助 :-)

.net c#

8
推荐指数
2
解决办法
5074
查看次数

ReaderWriterLockSlim 问题

在他的回答中,/sf/answers/1376510621/

斯蒂芬·克利里提到

ReaderWriterLockSlim 是一种线程仿射锁类型,因此通常 不能与 async 和 await 一起使用。

他所说的“通常”是什么意思?什么时候可以ReaderWriterLockSlim使用?

另外,我在这里读http://joeduffyblog.com/2007/02/07/introducing-the-new-readerwriterlockslim-in-orcas/ReaderWriterLockSlim有不同的怪癖,但这篇文章是从2007年开始它是否从那时起改变?

c# asynchronous locking

0
推荐指数
1
解决办法
792
查看次数

标签 统计

c# ×3

.net ×2

asynchronous ×1

locking ×1

multithreading ×1