Я работаю с классом, который управляет содержимым игры, и я хотел бы знать, как я могу блокировать вызовы метода dispose без блокировки на общий доступ к хранилищу, замок? Сами рабочие методы являются потокобезопасными и могут выполняться параллельно, поэтому я не хочу блокировать эти методы с помощью общей блокировки, которую метод-метод пытается получить при его запуске.Block IDisposable.Dispose из потокобезопасных методов
public void DoSomething()
{
lock (method1Lock) { /* ... */ }
}
public void Dispose()
{
lock (method1Lock)
lock (method2Lock)
lock (methodXLock)
{
}
}
не подходит в данном случае, поскольку, как упоминалось ранее, методы (DoSomething в данном случае) может работать параллельно.
Какой смысл блокировки в '.Dispose()'? Думаю, я не понимаю, почему * вам нужно блокировать здесь. * Что * работает параллельно? Это то, что должно блокировать выполнение до тех пор, пока методы не будут выполняться, а также попытаться обеспечить выполнение структуры выполнения в этом логическом уровне. – Joe
Здесь что-то вонючее. Вы передаете право собственности на эти объекты? Тот, кто создал экземпляр, как правило, несет ответственность за его удаление. – Steven
Аналогичный случай: http://stackoverflow.com/questions/8927878/what-is-the-correct-way-of-adding-thread-safety-to-an-idisposable-object –