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

Здесь есть возможность читать онлайн «Герберт Шилдт - C# 4.0 - полное руководство» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва -- Киев, Год выпуска: 2011, ISBN: 2011, Издательство: ООО И.Д. Вильямс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

C# 4.0: полное руководство: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «C# 4.0: полное руководство»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

C# 4.0: полное руководство — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «C# 4.0: полное руководство», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

public Task(Func функция)

public Task(FuncCObject, TResult> функция, Object состояние)

где функция обозначает выполняемый делегат. Обратите внимание на то, что он должен быть типа Func, а не Action. Тип Funcиспользуется именно в тех случаях, когда задача возвращает результат. В первом конструкторе создается задача без аргументов, а во втором конструкторе — задача, принимающая аргумент типа Object, передаваемый как состояние. Имеются также другие конструкторы данного класса.

Как и следовало ожидать, имеются также другие варианты метода StartNew(), доступные в обобщенной форме класса TaskFactoryи поддерживающие возврат результата из задачи. Ниже приведены те варианты данного метода, которые применяются параллельно с только что рассмотренными конструкторами класса Task.

public Task StartNew(Func функция)

public Task StartNew(Func функция, Object состояние)

В любом случае значение, возвращаемое задачей, получается из свойства Resultв классе Task, которое определяется следующим образом.

public TResult Result { get; internal set; }

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

В приведенном ниже примере программы демонстрируется возврат задачей значений. В этой программе создаются два метода. Первый из них, MyTask(), не принимает параметров, а просто возвращает логическое значение true типа bool. Второй метод, SumIt(), принимает единственный параметр, который приводится к типу int, и возвращает сумму из значения, передаваемого в качестве этого параметра.

// Возвратить значение из задачи.

using System;

using System.Threading;

using System.Threading.Tasks;

class DemoTask {

// Простейший метод, возвращающий результат и не принимающий аргументов,

static bool MyTask() {

return true;

}

// Этот метод возвращает сумму из положительного целого значения,

// которое ему передается в качестве единственного параметра

static int SumIt(object v) {

int x = (int)v;

int sum = 0;

for (; x > 0; x--)

sum += x;

return sum;

}

static void Main() {

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

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

Task tsk = Task.Factory.StartNew(MyTask);

Console.WriteLine("Результат после выполнения задачи MyTask: "

+ tsk.Result);

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

Task tsk2 = Task.Factory.StartNew(SumIt, 3);

Console.WriteLine("Результат после выполнения задачи SumIt: "

+ tsk2.Result);

tsk.Dispose();

tsk2.Dispose();

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

}

}

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

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

Результат после выполнения задачи MyTask: True

Результат после выполнения SumIt: 6

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

Помимо упомянутых выше форм класса Taskи метода StartNew, имеются также другие формы. Они позволяют указывать другие дополнительные параметры.

Отмена задачи и обработка исключения AggregateException

В версии 4.0 среды .NET Framework внедрена новая подсистема, обеспечивающая структурированный, хотя и очень удобный способ отмены задачи. Эта новая подсистема основывается на понятии признака отмены. Признаки отмены поддерживаются в классе Task, среди прочего, с помощью фабричного метода StartNew().

------------------------------------

ПРИМЕЧАНИЕ

Новую подсистему отмены можно применять и для отмены потоков, рассматривавшихся в предыдущей главе, но она полностью интегрирована в TPL и PLINQ. Именно поэтому эта подсистема рассматривается в этой главе.

------------------------------------

Отмена задачи, как правило, выполняется следующим образом. Сначала получается признак отмены из источника признаков отмены. Затем этот признак передается задаче, после чего она должна контролировать его на предмет получения запроса на отмену. (Этот запрос может поступить только из источника признаков отмены.) Если получен запрос на отмену, задача должна завершиться. В одних случаях этого оказывается достаточно для простого прекращения задачи без каких-либо дополнительных действий, а в других — из задачи должен быть вызван метод ThrowIfCancellationRequested()для признака отмены. Благодаря этому в отменяющем коде становится известно, что задача отменена. А теперь рассмотрим процесс отмены задачи более подробно.

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

Интервал:

Закладка:

Сделать

Похожие книги на «C# 4.0: полное руководство»

Представляем Вашему вниманию похожие книги на «C# 4.0: полное руководство» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «C# 4.0: полное руководство»

Обсуждение, отзывы о книге «C# 4.0: полное руководство» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x