• Методы (а также лямбда-выражения или анонимные методы), помеченные ключевым словом async
await.• Один метод async
await.• Когда встречается выражение await
• Ключевое слово await
Task, что выглядит как прямой возврат лежащего в основе возвращаемого значения. Методы, не имеющие возвращаемого значения, просто возвращают void.• Проверка параметров и другая обработка ошибок должна делаться в главной части метода с переносом фактической порции async
• Для переменных, находящихся в стеке, объект ValueTask
Task, который может стать причиной упаковки и распаковки.• По соглашению об именовании методы, которые могут вызываться асинхронно, должны быть помечены с помощью суффикса Async
Резюме
Глава начиналась с исследования роли пространства имен System.Threading
Затем в главе исследовались новые модели для разработки многопоточных приложений, введенные в .NET 4.0, в частности Task Parallel Library и PLINQ. В завершение главы была раскрыта роль ключевых слов async
await. Вы видели, что эти ключевые слова используются многими типами в библиотеке TPL; однако большинство работ по созданию сложного кода для многопоточной обработки и синхронизации компилятор выполняет самостоятельно.Часть V
Программирование с использованием сборок .NET Core
Глава 16
Построение и конфигурирование библиотек классов
В большинстве примеров, рассмотренных до сих пор, создавались "автономные" исполняемые приложения, где вся программная логика упаковывалась в единственную сборку (*.dll
dotnet.ехе (или копии dotnet.ехе, носящей имя сборки). Такие сборки использовали в основном библиотеки базовых классов .NET Core. В то время как некоторые простые программы .NET Core могут быть сконструированы с применением только библиотек базовых классов, многократно используемая программная логика нередко изолируется в *.dll), которые могут разделяться между приложениями.В настоящей главе вы сначала исследуете детали разнесения типов по пространствам имен .NET Core. После этого вы подробно ознакомитесь с библиотеками классов в .NET Core, выясните разницу между .NET Core и .NET Standard, а также научитесь конфигурировать приложения, публиковать консольные приложения .NET Core и упаковывать свои библиотеки в многократно используемые пакеты NuGet.
Определение специальных пространств имен
Прежде чем погружаться в детали развертывания и конфигурирования библиотек, сначала необходимо узнать, каким образом упаковывать свои специальные типы в пространства имен .NET Core. Вплоть до этого места в книге создавались небольшие тестовые программы, которые задействовали существующие пространства имен из мира .NET Core (в частности System
namespace. Явное определение специальных пространств имен становится еще более важным при построении разделяемых сборок, т.к. для использования ваших типов другие разработчики будут нуждаться в ссылке на вашу библиотеку и импортировании специальных пространств имен. Специальные пространства имен также предотвращают конфликты имен, отделяя ваши специальные классы от других специальных классов, которые могут иметь совпадающие имена.Чтобы исследовать все аспекты непосредственно, начните с создания нового проекта консольного приложения .NET Core под названием CustomNamespaces
Square (квадрат), Circle (круг) и Hexagon (шестиугольник). Учитывая сходные между ними черты, было бы желательно сгруппировать их в уникальном пространстве имен MyShapes внутри сборки CustomNamespaces.ехе.