Герберт Шилдт - C# 4.0: полное руководство

Тут можно читать онлайн Герберт Шилдт - C# 4.0: полное руководство - бесплатно ознакомительный отрывок. Жанр: comp-programming, издательство ООО И.Д. Вильямс, год 2011. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    C# 4.0: полное руководство
  • Автор:
  • Жанр:
  • Издательство:
    ООО И.Д. Вильямс
  • Год:
    2011
  • Город:
    Москва -- Киев
  • ISBN:
    978-5-8459-1684-6
  • Рейтинг:
    3.93/5. Голосов: 141
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Герберт Шилдт - C# 4.0: полное руководство краткое содержание

C# 4.0: полное руководство - описание и краткое содержание, автор Герберт Шилдт, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.


Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок

C# 4.0: полное руководство - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Герберт Шилдт
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

// Использовать метод экземпляра в качестве задачи.

using System;

using System.Threading;

using System.Threading.Tasks;

class MyClass {

// Метод выполняемый в качестве задачи,

public void MyTask() {

Console.WriteLine("MyTask() запущен");

for(int count = 0; count < 10; count++) {

Thread.Sleep(500);

Console.WriteLine("В методе MyTask(), подсчет равен " + count);

}

Console.WriteLine("MyTask завершен ");

}

}

class DemoTask {

static void Main() {

Console.WriteLine("Основной поток запущен.");

// Сконструировать объект типа MyClass.

MyClass me = new MyClass();

// Сконструировать объект задачи для метода mc.MyTask().

Task tsk = new Task(me.MyTask);

// Запустить задачу на исполнение,

tsk.Start();

// Сохранить метод Main() активным до завершения метода MyTask().

for(int i = 0; i < 60; i++) {

Console.Write (".");

Thread.Sleep (100);

}

Console.WriteLine("Основной поток завершен.");

}

}

Результат выполнения этой программы получается таким же, как и прежде. Единственное отличие состоит в том, что метод MyTask()вызывается теперь для экземпляра объекта класса MyClass.

В отношении задач необходимо также иметь в виду следующее: после того, как задача завершена, она не может быть перезапущена. Следовательно, иного способа повторного запуска задачи на исполнение, кроме создания ее снова, не существует.

Применение идентификатора задачи

В отличие от класса Thread; в классе Taskотсутствует свойство Nameдля хранения имени задачи. Но вместо этого в нем имеется свойство Idдля хранения идентификатора задачи, по которому можно распознавать задачи. Свойство Idдоступно только для чтения и относится к типу int. Оно объявляется следующим образом.

public int Id { get; }

Каждая задача получает идентификатор, когда она создается. Значения идентификаторов уникальны, но не упорядочены. Поэтому один идентификатор задачи может появиться перед другим, хотя он может и не иметь меньшее значение.

Идентификатор исполняемой в настоящий момент задачи можно выявить с помощью свойства CurrentId. Это свойство доступно только для чтения, относится к типу staticи объявляется следующим образом.

public static Nullable CurrentID { get; }

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

В приведенном ниже примере программы создаются две задачи и показывается, какая из них исполняется.

// Продемонстрировать применение свойств Id и CurrentId.

using System;

using System.Threading;

using System.Threading.Tasks;

class DemoTask {

// Метод, исполняемый как задача,

static void MyTask() {

Console.WriteLine("MyTask() №" + Task.CurrentId + " запущен");

for (int count = 0; count < 10; count++) {

Thread.Sleep(500);

Console.WriteLine("В методе MyTaskO #" + Task.CurrentId +

", подсчет равен " + count );

}

Console.WriteLine("MyTask №" + Task.CurrentId + " завершен");

}

static void Main() {

Console.WriteLine("Основной поток запущен.");

// Сконструировать объекты двух задач.

Task tsk = new Task(MyTask);

Task tsk2 = new Task(MyTask);

// Запустить задачи на исполнение,

tsk.Start();

tsk2.Start();

Console.WriteLine("Идентификатор задачи tsk: " + tsk.Id);

Console.WriteLine("Идентификатор задачи tsk2: " + tsk2.Id);

// Сохранить метод Main() активным до завершения остальных задач,

for(int i = 0; i < 60; i++) {

Console.Write(".");

Thread.Sleep (100);

}

Console.WriteLine("Основной поток завершен.");

}

}

Выполнение этой программы приводит к следующему результату.

Основной поток запущен.

Идентификатор задачи tsk: 1

Идентификатор задачи tsk2: 2

.MyTask() №1 запущен

MyTask() №2 запущен

....В методе MyTask() #1, подсчет равен 0

В методе MyTask() #2, подсчет равен 0

.....В методе MyTask() #1, подсчет равен 1

В методе MyTask() #2, подсчет равен 1

.....В методе MyTask() #1, подсчет равен 2

В методе MyTask() #2, подсчет равен 2

....В методе MyTask() #2, подсчет равен 3

В методе MyTask() #1, подсчет равен 3

.....В методе MyTask() #1, подсчет равен 4

В методе MyTask() #2, подсчет равен 4

.....В методе MyTask() #1, подсчет равен 5

В методе MyTask() #2, подсчет равен 5

.....В методе MyTask() #1, подсчет равен 6

В методе MyTask() #2, подсчет равен 6

....В методе MyTask() #1, подсчет равен 7

В методе MyTask() #2, подсчет равен 7

.....В методе MyTask() #1, подсчет равен 8

В методе MyTask() #2, подсчет равен 8

.....В методе MyTask() #2, подсчет равен 9

MyTask №2 завершен

В методе MyTask() #1, подсчет равен 9

MyTask №1 завершен

............Основной поток завершен.

Применение методов ожидания

В приведенных выше примерах основной поток исполнения, а по существу, метод Main(), завершался потому, что такой результат гарантировали вызовы метода Thread.Sleep(). Но подобный подход нельзя считать удовлетворительным.

Организовать ожидание завершения задач можно и более совершенным способом, применяя методы ожидания, специально предоставляемые в классе Task. Самым простым из них считается метод Wait(), приостанавливающий исполнение вызывающего потока до тех пор, пока не завершится вызываемая задача. Ниже приведена простейшая форма объявления этого метода.

public void Wait()

При выполнении этого метода могут быть сгенерированы два исключения. Первым из них является исключение ObjectDisposedException. Оно генерируется в том случае, если задача освобождена посредством вызова метода Dispose(). А второе исключение, AggregateException, генерируется в том случае, если задача сама генерирует исключение или же отменяется. Как правило, отслеживается и обрабатывается именно это исключение. В связи с тем что задача может сгенерировать не одно исключение, если, например, у нее имеются порожденные задачи, все подобные исключения собираются в единое исключение типа AggregateException. Для того чтобы выяснить, что же произошло на самом деле, достаточно проанализировать внутренние исключения, связанные с этим совокупным исключением. А до тех пор в приведенных далее примерах любые исключения, генерируемые задачами, будут обрабатываться во время выполнения.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Герберт Шилдт читать все книги автора по порядку

Герберт Шилдт - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




C# 4.0: полное руководство отзывы


Отзывы читателей о книге C# 4.0: полное руководство, автор: Герберт Шилдт. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x