long vs {0L} [0]
75
11
В одной из наших старых служб я нашел такой фрагмент кода (комментарии оригиналы):
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
3 года, 1 месяц назад
добавить комментарий
пожаловаться
Ваш ответ
- Вопросы
- Interlocked
- long vs {0L} [0]