DarkByte2015: Разумеется прочел до конца, очень часто здесь всплывают вопросы, когда автор сам не понимает, что делает и может дезинформировать опрашиваемую аудиторию, это первое.
Второе, есть большая разница между Application.Current.Dispatcher.Invoke и Dispatcher.CurrentDispatcher.Invoke, из Вашего вопроса не совсем понятно, действительно ли Вы использовали WPF диспатчер,
А в третьих, немного пораскинув мозгами, понял, в чем же проблема: по скольку обработчик был асинхронный, то коллекция создавалась потоке, отличном от основного, поэтому модификация коллекции из основного потока и порождала ошибку
Захаров Александр: По началу пару дней с этим мудохался - скомпилируешь проект, подключаешься отладчиком, отладчик пишет, что pdb не нашел, потому вкурил, что IIS загрузит и измененные сборки их pdb когда первый запрос придет на сервис.
Покажите вызывающий код, на первый взгляд проблем не вижу, в VS код тоже работает нормально при вызове GetOrAdd два раза с одним и тем же ключом.
PS: lock(this) - плохо, не юзайте его., юзайте lock(имя_приватного_поля_класса)
Такое допустимо, если не имеешь своей семьи и сидишь на шее у родителей и в принципе больше нехрен делать как с утра до вечера бесплатно "полировать" чужой продукт
JohnJon: Чтобы получить опыт в предметной области, опыт коммуникации с заказчиком и фидбек от пользователей. Самопальный проект на гитхабе на старте - писанина в стол.
Да здесь, походу, вы один этого не знаете, но при этом кичитесь своими "скилами" и ставите вопрос как маленький капризный ребенок, у которого не получается что-либо сделать и он просит не помощи в работе, а требует, чтобы работа была сделана за него .
Я бы так и сделал. Купил бы VPS рублей за 500 в месяц и на него бота перенес, работает автономно, пить/есть не просит. Попутно на хостинге еще проекты можно разворачивать.
А от wifi по-Вашему не будет жраться?