long vs {0L} [0]

59
9

В одной из наших старых служб я нашел такой фрагмент кода (комментарии оригиналы):

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?

Вероятно, этот подход имеет преимущества, о которых я не знаю?

Вероятно, стоит упомянуть, что переменные используются в async lambda. Когда я меняю его на базовый long плагин Resharper, я предупреждаю меня "Доступ к модифицированному закрытию" и предлагает обернуть его в массив. Я нашел пару вопросов по этому поводу:

Доступ к модифицированному закрытию

Предупреждение ReSharper - доступ к модифицированному закрытию

спросил(а) 2018-01-10T20:39:00+03:00 1 год, 11 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема