LoveRead.info » Книги » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

178 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

Книга Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читать онлайн бесплатно без регистрации

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 193 194 195 196 197 198 199 200 201 ... 407
    Перейти на страницу:
    второго параметра выходит

          // за пределы допустимого диапазона.

       Console.WriteLine("Something bad happened");

        });

      }

    }

    Отмена операций async/await

    Шаблон async/await также допускает отмену, которая реализуется намного проще, чем с методом Parallel.ForEach(). Для демонстрации будет применяться тот же самый проект приложения WPF, рассмотренный ранее в главе. Вы можете либо повторно использовать этот проект, либо создать в решении новый проект приложения WPF (.NET Core) и добавить к нему пакет System.Drawing.Common с помощью следующих команд CLI:

    dotnet new wpf -lang c# -n PictureHandlerWithAsyncAwait

                   -o .PictureHandlerWithAsyncAwait -f net5.0

    dotnet sln .Chapter15_AllProjects.sln add .PictureHandlerWithAsyncAwait

    dotnet add PictureHandlerWithAsyncAwait package System.Drawing.Common

    Если вы работаете в Visual Studio, тогда щелкните правой кнопкой мыши на имени решения в окне Solution Explorer, выберите в контекстном меню пункт AddProject (Добавить►Проект) и назначьте ему имя PictureHandlerWithAsyncAwait. Сделайте новый проект стартовым, щелкнув правой кнопкой мыши на его имени и выбрав в контекстном меню пункт Set as Startup Project (Установить как стартовый проект). Добавьте NuGet-пакет System.Drawing.Common:

    dotnet add PictureHandlerWithAsyncAwait package System.Drawing.Common

    Приведите разметку XAML в соответствие с предыдущим проектом приложения WPF, но с заголовком Picture Handler with Async/Await.

    Удостоверьтесь, что в файле MainWindow.xaml.cs присутствуют показанные ниже операторы using:

    using System;

    using System.IO;

    using System.Threading;

    using System.Threading.Tasks;

    using System.Windows;

    using System.Drawing;

    Затем добавьте переменную уровня класса для объекта CancellationToken и обработчик событий для кнопки Cancel:

    private CancellationTokenSource _cancelToken = null;

    private void cmdCancel_Click(object sender, EventArgs e)

    {

      _cancelToken.Cancel();

    }

    Процесс здесь такой же, как в предыдущем примере: получение каталога с файлами изображений, создание выходного каталога, получение файлов, поворот изображений в файлах и сохранение их в выходном каталоге. В новой версии для выполнения работы будут применяться асинхронные методы, а не Parallel.ForEach(), и сигнатуры методов принимают в качестве параметра объект CancellationToken. Введите следующий код:

    private async void cmdProcess_Click(object sender, EventArgs e)

    {

      _cancelToken = new CancellationTokenSource();

      var basePath = Directory.GetCurrentDirectory();

       var pictureDirectory =

        Path.Combine(basePath, "TestPictures");

      var outputDirectory =

        Path.Combine(basePath, "ModifiedPictures");

      // Удалить любые существующие файлы

      if (Directory.Exists(outputDirectory))

      {

        Directory.Delete(outputDirectory, true);

      }

      Directory.CreateDirectory(outputDirectory);

      string[] files = Directory.GetFiles(

        pictureDirectory, "*.jpg", SearchOption.AllDirectories);

      try

      {

        foreach(string file in files)

        {

          try

          {

            await ProcessFile(

             file, outputDirectory,_cancelToken.Token);

          }

          catch (OperationCanceledException ex)

          {

            Console.WriteLine(ex);

            throw;

          }

        }

      }

      catch (OperationCanceledException ex)

      {

        Console.WriteLine(ex);

        throw;

      }

      catch (Exception ex)

      {

        Console.WriteLine(ex);

        throw;

      }

      _cancelToken = null;

      this.Title = "Processing complete";

    }

    После начальных настроек в коде организуется цикл по файлам с асинхронным вызовом метода ProcessFile() для каждого файла. Вызов метода ProcessFile() помещен внутрь блока try/catch и ему передается объект CancellationToken. Если вызов Cancel() выполняется на CancellationTokenSource (т.е. когда пользователь щелкает на кнопке Cancel), тогда генерируется исключение OperationCanceledException.

    На заметку! Код try/catch может находиться где угодно в цепочке вызовов (как вскоре вы увидите). Размещать его при первом вызове или внутри самого асинхронного метода — вопрос личных предпочтений и нужд приложения.

    Наконец, добавьте финальный метод ProcessFile():

    private async Task ProcessFile(string currentFile,

      string outputDirectory, CancellationToken token)

    {

      string filename = Path.GetFileName(currentFile);

      using (Bitmap bitmap = new Bitmap(currentFile))

      {

        try

        {

          await Task.Run(() =>

          {

            Dispatcher?.Invoke(() =>

            {

              this.Title = $"Processing {filename}";

            });

            bitmap.RotateFlip(RotateFlipType.Rotate180FlipNone);

            bitmap.Save(Path.Combine(outputDirectory, filename));

          }

         ,token);

        }

        catch (OperationCanceledException ex)

        {

          Console.WriteLine(ex);

          throw;

        }

      }

    }

    Метод ProcessFile() использует еще одну перегруженную версию Task.Run(), которая принимает в качестве параметра объект CancellationToken. Вызов Task.Run() помещен внутрь блока try/catch (как и вызывающий код) на случай щелчка пользователем на кнопке Cancel.

    Асинхронные потоки (нововведение в версии 8.0)

    В версии C# 8.0 появилась возможность создания и потребления потоков данных (раскрываются в главе 20) асинхронным образом. Метод, который возвращает асинхронный поток данных:

    • объявляется с модификатором async;

    • возвращает реализацию IAsyncEnumerable<T>;

    • содержит операторы yield return (рассматривались в главе 8) для возвращения последовательных элементов в асинхронном потоке данных.

    Взгляните на приведенный далее пример:

    public static async IAsyncEnumerable<int> GenerateSequence()

    {

      for (int i = 0; i < 20; i++)

      {

       await Task.Delay(100);

        yield return i;

      }

    }

    Метод GenerateSequence() объявлен как async, возвращает реализацию IAsyncEnumerable<int> и применяет yield return для возвращения целых чисел из последовательности. Чтобы вызывать этот метод, добавьте следующий код:

    await foreach (var number in GenerateSequence())

    {

      Console.WriteLine(number);

    }

    Итоговые сведения о ключевых словах async и await

    Настоящий раздел содержал много примеров; ниже перечислены ключевые моменты, которые в нем рассматривались.

    • Методы (а также лямбда-выражения или анонимные методы) могут быть помечены ключевым словом async, что позволяет им работать в неблокирующей манере.

    • Методы (а также лямбда-выражения или анонимные методы), помеченные ключевым словом async, будут выполняться синхронно до тех пор, пока не встретится ключевое слово await.

    • Один метод async может иметь множество контекстов await.

    • Когда встречается выражение await, вызывающий поток приостанавливается до тех пор, пока ожидаемая задача не завершится. Тем временем управление возвращается коду, вызвавшему метод.

    • Ключевое

    1 ... 193 194 195 196 197 198 199 200 201 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Анна Анна15 июнь 07:43 [spoiler][книга интересная,но не полная и к концу главы повторяются.... Кириленко Ирина – Бирюк
    2. Вера Вера15 июнь 01:46 Благодарю Автора!!!! Хорошо,что все хорошо кончается! Сюжет-захватывает!!!... Звезда+1 - Алайна Салах
    3. Борис Борис14 июнь 00:50 Колокола в России тем и отличались от западных что раскачиаали именно язык колокола,а не сам колокол! Авторы что-жертвы ЕГЭ? Не... Соединенные Штаты России 3 - Полина Ром
    Все комметарии
    Новинки бесплатной онлайн библиотеки