Похоже что будет серия интересных статей про написание собственного GC. Пока что опубликована первая часть, но я буду следить :) Этот же автор кстати писал интересную другую серию статей про профайлинг. #dotnet
minidump.net
Writing a .NET Garbage Collector in C# - Part 1
First part of a series of articles about writing a .NET Garbage Collector in C# using NativeAOT. This part sets the expectations and setups the project, dealing with the first difficulties.
👍5👀2🔥1🤯1
Недавно в чятике видел вопрос/проблему - несоответствие scope для сервисов в DI, которые стреляют в рантайме в момент ресолва-активации сервиса (=в случайный момент времени, который может случится очень несразу).
Ну так вот на эту тему есть решение, которое провалидирует scope сервисов и сломает запуск, если там что-то не так #dotnet
upd в камментах написали, что это лучше делать для DEBUG окружении - конечно да, для релиза/прода это не имеет особого смысла и увеличивает время старта.
Ну так вот на эту тему есть решение, которое провалидирует scope сервисов и сломает запуск, если там что-то не так #dotnet
upd в камментах написали, что это лучше делать для DEBUG окружении - конечно да, для релиза/прода это не имеет особого смысла и увеличивает время старта.
🔥17👍3
В связи с приближающимся моментом перевода прекрасной штуки MassTransit на коммерческие рельсы - вспомнил, что есть неплохая альтернатива - Rebus, про которого я уже писал больше года назад. Он тоже умеет практически всё, что умеет MassTransit. В некоторых отношениях (например саги или декорацию pipeline, чтобы пробросить контекст между обработчиками саги) - в Rebus даже проще описывать.
Единственное, что прилично отличается - это регистрация consumerов (на скриншоте). У меня в проектах, например, все consumerы - суть scoped сервисы, которые используют другие scoped сервисы. А классический предлагаемый способ в Rebus через services.AddRebusHandler<T> - регает консумера как Transient сервис. Так что тут надо внимательней быть, да.
Попробую попозже сделать пример и для саг. #dotnet
Единственное, что прилично отличается - это регистрация consumerов (на скриншоте). У меня в проектах, например, все consumerы - суть scoped сервисы, которые используют другие scoped сервисы. А классический предлагаемый способ в Rebus через services.AddRebusHandler<T> - регает консумера как Transient сервис. Так что тут надо внимательней быть, да.
Попробую попозже сделать пример и для саг. #dotnet
🔥16👍2
Как запилить свой Model Context Protocol адаптер для того, чтобы интегрировать их в LLM. Ещё одна статья на Microsoft и примеры на C# #dotnet #llm
👍12🥱2