Длинный против {0L}[0]
В одном из наших старых сервисов я нашел такой кусок кода (комментарии оригинальные):
long[] tasksCounter = {0}; //boxing for long counters
long[] errorsCounter = {0}; //boxing for long counters
Далее в коде эти "массивы" используются с классом Interlocked: Interlocked.Increment(ref errorsCounter[0])
, Interlocked.Read(ref errorsCounter[0])
так далее).
Интересно, почему автор не использовал основы? long tasksCounter, errorsCounter
?
Возможно, у этого подхода есть преимущества, о которых я не знаю?
Вероятно, стоит упомянуть, что переменные используются в асинхронной лямбде. Когда я изменяю это на основной long
Плагин Resharper предупреждает меня "Доступ к измененному закрытию" и предлагает обернуть его в массив. Я нашел пару вопросов об этом: