Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
await foreach (var number in GenerateSequence())
{
Console.WriteLine(number);
}
Итоговые сведения о ключевых словах async и await
Настоящий раздел содержал много примеров; ниже перечислены ключевые моменты, которые в нем рассматривались.
• Методы (а также лямбда-выражения или анонимные методы) могут быть помечены ключевым словом
async
• Методы (а также лямбда-выражения или анонимные методы), помеченные ключевым словом
async
await
• Один метод
async
await
• Когда встречается выражение
await
• Ключевое слово
await
Task
void
• Проверка параметров и другая обработка ошибок должна делаться в главной части метода с переносом фактической порции
async
• Для переменных, находящихся в стеке, объект
ValueTask
Task
• По соглашению об именовании методы, которые могут вызываться асинхронно, должны быть помечены с помощью суффикса
Async
Резюме
Глава начиналась с исследования роли пространства имен
System.Threading
Затем в главе исследовались новые модели для разработки многопоточных приложений, введенные в .NET 4.0, в частности Task Parallel Library и PLINQ. В завершение главы была раскрыта роль ключевых слов
async
await
Часть V
Программирование с использованием сборок .NET Core
Глава 16
Построение и конфигурирование библиотек классов
В большинстве примеров, рассмотренных до сих пор, создавались "автономные" исполняемые приложения, где вся программная логика упаковывалась в единственную сборку (
*.dll
dotnet.ехе
dotnet.ехе
*.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.ехе
Хотя компилятор C# без проблем воспримет единственный файл кода С#, содержащий множество типов, такой подход может стать проблематичным в командном окружении. Если вы работаете над типом
Circle
Hexagon
Более удачный подход предусматривает помещение каждого класса в собственный файл, с определением в каждом из них пространства имен. Чтобы обеспечить упаковку типов в ту же самую логическую группу, просто помещайте заданные определения классов в область действия одного и того же пространства имен:
<b>// Circle.cs</b>
namespace MyShapes
{
// Класс Circle
public class Circle { /* Интересные методы... */ }
}
<b>// Hexagon.cs</b>
namespace MyShapes
{