1. Использовать private readonly object timeLock = new();
2. Использовать Mutex/Semaphore/SemaphoreSlim
3. Использовать класс Interlocked
Но я бы попробовал так:
4. Переосмыслить архитектуру, чтобы не было общих изменяемых ресурсов
5. Убедиться, что действительно вам нужен именно long, а не DateTime(Offset) или TimeSpan
Посмотри Гарвардский курс по основам программирования CS50, есть на русском от JavaRush (если нужен). Там довольно неплохо объясняются основы. Вообще, нужно начать именно с основ и особо без разницы какой язык, нужно научиться мыслить. Потом учишь синтаксис и все остальное у какого-нибудь языка. Начинаешь решать простые математические задачки, после этого повышаешь уровень сложности, пока не научишься. Пробуй постоянно менять источник знаний, будь это видео, статьи, документация или книги. Начнешь черпать инфу с разных источников - начнешь быстрее разбираться. Вот ссылка на курс
Рассуждайте логично . Перед кластером редиса у вас должен быть балансировщик который как то выделит куда послать, нагрузка по сути это пропускная способность сети и память на нодах что бы кэш был в памяти. Так что без цифр что то сложно сказать
Во-первых, определите для себя критерии "стоящести"
А так вот моё мнение, когда имеет смысл выбрать именно Xamarin:
1. Уже есть много бизнес-логики, написанной на C# или любом другом .net языке
2. В дальнейшем планируется поддержка приложения C#-разработчиками.
Серьёзных причин, почему нет - нет (по моему мнению)
Есть ещё неплохой доклад на эту тему, правда не самый новый
Проекты такого масштаба строятся на множестве различных по назначению без данных: реляционные, не реляционные, колоночные, timeseries,... и каждая из них масштабирована
Если есть базовые знания в программировании, то, на мой взгляд, неплохо подойдет книга Эндрю Троелсена "Язык программирования C#". Имею 2 издания на руках: 6 (С# 5 и .NET 4.5) и 8 (C# 7 и .NET Core). В более сложных темах она может быть написана не самым простым языком, но к этому моменту уже должно сложиться хорошее понимания C# и его концепций