Делайте async и будет вам счастье.
await еще не означает создания дополнительный поток (тред). Особенно, когда дело касается асинхронного ввода-вывода.
IEnumerable<Book> books = await db.Books.ToListAsync();
.NET Native заменяет полную среду CLR на оптимизированную среды выполнения, которая в первую очередь содержит сборщика мусора. Оптимизированная среда выполнения находится в библиотеке mrt100_app.dll, которая является локальной для приложения и имеет размер только несколько сотен килобайт. Это возможно потому, что статическое связывание устраняет необходимость во многих операциях, реализуемых средой CLR.
// Было
$('#mydiv .element').live('click', function(){
// здесь параметры функции
});
// Стало
$('#mydiv').on('click', '.element', function(){
// здесь параметры функции
});
[Authorize(Roles="Admin")]
Есть еще некие клаймы для более тонкой настройки. Есть несколько готовых методов работы со всем этим.
Но вот что меня смущает, в более сложном варианте есть три уровня для авторизации: это фронтенд, бекенд и база.
На уровне бека я привел строчку, мы можем отсекать пользователей и это готово из коробки.
На уровне базы, если это нужно (например, есть организация и у неё есть список сотрудников. Чтобы пользователь, привязанный к организации, мог получить только сотрудников своей организации одним запросом ToList без дополнительных Where), можно сделать фабрику контекстов и разбирать по клаймам к какой организации привязан пользователь на все запросы накидывать Where.
Ну или чем-то подобным. Суть в том, что реализовать можно, но уже нужно что-то допиливать руками.
А вот с фронтом, например, накинуть disable на какие-то кнопки, придется так же кастылять проброс доступных use case-ov, экшинов, или кто как называет, на клиент. В смысле, на клиенте доработки понятны, но созданная база для этого уже не подходит, то есть весь этот уровень нужно самому писать. Или я это как-то не так себе представляю?