Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 块IDisposable.Dispose自线程安全方法_C#_Dispose_Finalizer - Fatal编程技术网

C# 块IDisposable.Dispose自线程安全方法

C# 块IDisposable.Dispose自线程安全方法,c#,dispose,finalizer,C#,Dispose,Finalizer,我正在使用一个管理游戏内容的类,我想知道如何在不锁定共享dispose锁的情况下阻止对dispose方法的调用?worker方法本身是线程安全的,可以并行执行,这就是为什么我不想用dispose方法在触发时试图获取的共享锁来锁定这些方法 public void DoSomething() { lock (method1Lock) { /* ... */ } } public void Dispose() { lock (method1Lock) lock (method

我正在使用一个管理游戏内容的类,我想知道如何在不锁定共享dispose锁的情况下阻止对dispose方法的调用?worker方法本身是线程安全的,可以并行执行,这就是为什么我不想用dispose方法在触发时试图获取的共享锁来锁定这些方法

public void DoSomething()
{
    lock (method1Lock) { /* ... */ }
}

public void Dispose()
{
    lock (method1Lock)
    lock (method2Lock)
    lock (methodXLock)
    {

    }
}

在这种情况下是不合适的,因为正如我前面提到的,这些方法(本例中的DoSomething)可以并行运行。

使用
读写器锁。让
方法…
代码取读端,
Dispose
取写端(独占)。

.Dispose()中阻塞的意义是什么?我想我不明白你为什么要封锁这里。什么是并行运行这些东西?这就是应该在方法运行完成之前阻止执行的事情,而不是试图在这个逻辑层中强制执行运行时构造。你是在传递这些物品的所有权吗?创建实例的人通常应该负责处理它。类似的情况:@Steven实际上,它一点也不臭。它是一个资产加载类,用于加载和缓存资产。在应用程序生命周期结束时,该类本身将在主线程上释放,并由其他线程上的多个其他实例传递和使用。但是,对于一个无痛苦的处理,我需要确保在一个方法的中间线程不被调用。谢谢,这是我一直在寻找的解决方案。你确信在处理对象之前,这些方法实际上已经被调度了吗?也就是说,您知道在一个或多个方法有可能被执行之前不会处理对象吗?@LasseV.Karlsen不,我无法确保调用其中一个方法。如前所述,它是一个资产加载器,虽然不太可能,但可能根本不被使用。