Если вам нужно реактивное взаимодействие с объектами в реальном времени, стоит посмотреть в сторону акторов. Например, Orleans или akka.net. Рассматривали этот вариант?
Вся польза от хеширования паролей теряется. Ты принимаешь на беке уже хешированный пароль и его же хранишь в базе и сравниваешь при логине. Т.е. хешированный пароль становится твоим обычным паролем.
Почему такая сложная схема для проверки? Перед хешированием и сохранением хешированного пароля в базу пароль на бекенд все равно прилетает в текстовом виде по TLS. Там его и можно проверить. По поводу задержки: скорее всего там очередь, в которую сыпятся текстовые данные и аккаунт, с которого эти текстовые данные получены. Т.е. фильтрация происходит асинхронно.
IL-код из блока finally для обоих случаев.
Вариант с юзингом: IL_000d: ldloca.s b
IL_000f: constrained. C/book
IL_0015: callvirt instance void [System.Runtime]System.IDisposable::Dispose()
Вариант с ручным try-finally: IL_000e: ldloc.0
IL_000f: box C/book
IL_0014: callvirt instance void [System.Runtime]System.IDisposable::Dispose()
ref-структура не может быть упакована, а при таком касте произойдет упаковка. Именно поэтому ref-структуры не поддерживают интерфейсы. В статье об этом написано.
"Розовым цветом выделены эвенты...", "Зелёным цветом выделены эвенты..." - но на скриншотах этого нет. В некоторых случаях картинки без ваших пометок.
Если вам нужно реактивное взаимодействие с объектами в реальном времени, стоит посмотреть в сторону акторов. Например, Orleans или akka.net. Рассматривали этот вариант?
Вариант с юзингом:
IL_000d: ldloca.s b
IL_000f: constrained. C/book
IL_0015: callvirt instance void [System.Runtime]System.IDisposable::Dispose()
Вариант с ручным try-finally:
IL_000e: ldloc.0
IL_000f: box C/book
IL_0014: callvirt instance void [System.Runtime]System.IDisposable::Dispose()