Для вас сейчас самое простое это устроиться джуном в крупную компанию и просто учиться смотря на чужой код (хоть подаваном, хоть тестировщиком), это самый быстрый способ. Есть другой путь через всё пройти самому, но для этого нужно любить то чем занимаешся и очень много времени.
flexpc, менять значения свойств элементов ui принято только в ui потоке. При асинхронной работе нет гарантий что ваш код буде выполнен в ui поэтому надо синхронизироваться с ним, т.е. запланировать выполнение своего делегата в потоке ui. В avalonia это можно сделать через вызов метода await Dispatcher.UIThread.InvokeAsync(()=>{Categories.Items=categories;});
flexpc, вас не смущает предупреждение компилятора по причине async без await? Попробуйте присвоить items в ui потоке через вызов Dispatcher.UIThread.InvokeAsync
forced, в микросервисах всегда нужно придерживаться правила идемпотентности и будет вам счастье. Таже кафка гарантирует доставку сообщения хотябы один раз, т.е. одно и тоже сообщение может быть доставлено более одного раза, вот тут и поможет идемпотентность.
Т.е. ошибки появляются если выпытаетесь запустить свою игру у себя. Ошибка весьма похожа на попытку отправить сообщение родителю, которого при локальном запуске нет. Думаю что после публикации в каталоге ошибка пропадёт т.к. вашу игру будут запускать в iframe
Дмитрий, тут проблема иного плана. Сторона получающая экземпляр реализующий idisposable должна после его использования вызвать dispose (это такое соглашение у которого конечно есть исключения, но они прописаны явно)
Нельзя idisposable экземпляр делать одиночкой. Вас не смущают настойчивые предупреждения компилятора о наличии непроинициализированных полей предназначенных только для чтения в классе?