Читаем C# 4.0 полное руководство - 2011 полностью

В данном примере особое внимание обращает на себя следующее обстоятельство: выполнение метода Main () приостанавливается до тех пор, пока не произойдет возврат из метода Invoke (). Следовательно, метод Main (), в отличие от методов MyMeth () и MyMeth2 (), не выполняется параллельно. Поэтому применять метод Invoke () показанным здесь способом нельзя в том случае, если требуется, чтобы исполнение вызывающего потока продолжалось.

В приведенном выше примере использовались именованные методы, но для вызова методаInvoke() это условие не является обязательным. Ниже приведен переделанный вариант той же самой программы, где в качестве аргументов в вызове методаInvoke() применяются лямбда-выражения.

// Применить метод Parallel.Invoke() для параллельного выполнения двух методов. // В этой версии программы применяются лямбда-выражения.

using System;

using System.Threading;

using System.Threading.Tasks;

class DemoParallel {

static void Main() {

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

// Выполнить два анонимных метода, указываемых в лямбда-выражениях.

Parallel.Invoke( () => {

Console.WriteLine("Выражение #1 запущено");

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

Thread.Sleep(500);

Console.WriteLine("В выражении #1 подсчет равен " + count );

}

Console.WriteLine("Выражение #1 завершено");

},

О => {

Console.WriteLine("Выражение #2 запущено");

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

Thread.Sleep(500);

Console.WriteLine("В выражении #2 подсчет равен " + count );

}

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

}

}

Эта программа дает результат, похожий на результат выполнения предыдущей программы.

Применение метода For ()

В TPL параллелизм данных поддерживается, в частности, с помощью методаFor (),определенного в классеParallel.Этот метод существует в нескольких формах. Его рассмотрение мы начнем с самой простой формы, приведенной ниже:

public static ParallelLoopResult

For(intfromlnclusive,inttoExclusive,Actionbody)

гдеfromlnclusiveобозначает начальное значение того, что соответствует переменной управления циклом; оно называется также итерационным, или индексным, значением; atoExclusive —значение, на единицу больше конечного. На каждом шаге цикла переменная управления циклом увеличивается на единицу. Следовательно, цикл постепенно продвигается от начального значенияfromlnclusiveк конечному значениюtoExclusiveминус единица. Циклически выполняемый код указывается методом, передаваемым через параметрbody.Этот метод должен быть совместим с делегатомAction,объявляемым следующим образом.

public delegate void Action(Tobj)

Перейти на страницу:

Похожие книги

1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT