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(int
где
public delegate void Action<in T>(T
Главная особенность метода For () состоит в том, что он позволяет, когда такая возможность имеется, распараллелить исполнение кода в цикле. А это, в свою очередь, может привести к повышению производительности. Например, процесс преобразования массива в цикле может быть разделен на части таким образом, чтобы разные части массива преобразовывались одновременно. Следует, однако, иметь в виду, что повышение производительности не гарантируется из-за отличий в количестве доступных процессоров в разных средах выполнения, а также из-за того, что распараллеливание мелких циклов может составить издержки, которые превышают сэкономленное время.
В приведенном ниже примере программы демонстрируется применение метода For () на практике. В начале этой программы создается массив data, состоящий из 1000000000 целых значений. Затем вызывается метод For (), которому в качестве 'тела' цикла передается метод MyTransf оггп (). Этот метод состоит из ряда операторов,
