У меня есть класс C #.(Обратите внимание, что это просто для иллюстрации проблемы. Реальный код более сложен, чем этот.)
class MyClass
{
private readonly MyCustomData myData = new MyCustomData();
private int flarnCount = 0;
/* Redacted more data structures. */
public string One => myData[1];
public List<string> Evens => myData.Where(item => item.Key % 2 == 0).Select(item => item.Value).ToList();
public void SetValue(int index, string value) => myData[index] = value;
public void Flarn() { flarnCount+=1; myData[flarnCount] += 12; }
/* Redacted several hundred other similar functions. */
}
Он прекрасно работает, за исключением того, что я хочу иметь возможность вызывать его из нескольких потоков.Нет проблем, я просто добавляю строку ...
private readonly object mon = new object();
.. и добавляю команду lock (mon) к каждой публичной функции.
И это проблема.Я мог бы скопировать и вставить эту команду блокировки в каждую из нескольких сотен общедоступных функций, но это кажется тяжелой работой, и конечный результат выглядел бы действительно ужасно.
Есть ли способЯ могу сказать компилятору включить одну и ту же оболочку во все публичные функции?
ОБНОВЛЕНИЕ - я мог бы также спросить, как добавить один и тот же блок try / catch ко всем публичным функциям.Пожалуйста, не зацикливайтесь на самой проблеме блокировки, которая только иллюстрирует проблему.