Parallel.Invoke Метод

Определение

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

Перегрузки

Имя Описание
Invoke(Action[])

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

Invoke(ParallelOptions, Action[])

Выполняет каждое из указанных действий, возможно, параллельно, если операция не отменена пользователем.

Invoke(Action[])

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

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

public:
 static void Invoke(... cli::array <Action ^> ^ actions);
public static void Invoke(params Action[] actions);
static member Invoke : Action[] -> unit
Public Shared Sub Invoke (ParamArray actions As Action())

Параметры

actions
Action[]

Массив для Action выполнения.

Исключения

Аргумент actions имеет значение null.

Исключение, которое возникает, когда любое действие в массиве actions создает исключение.

Массив actions содержит null элемент.

Примеры

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

    class ParallelInvokeDemo
    {

        // Demonstrated features:
        // 		Parallel.Invoke()
        // Expected results:
        // 		The threads on which each task gets executed may be different.
        //		The thread assignments may be different in different executions.
        //		The tasks may get executed in any order.
        // Documentation:
        //		http://msdn.microsoft.com/library/dd783942(VS.100).aspx
        static void Main()
        {
            try
            {
                Parallel.Invoke(
                    BasicAction,	// Param #0 - static method
                    () =>			// Param #1 - lambda expression
                    {
                        Console.WriteLine("Method=beta, Thread={0}", Thread.CurrentThread.ManagedThreadId);
                    },
                    delegate()		// Param #2 - in-line delegate
                    {
                        Console.WriteLine("Method=gamma, Thread={0}", Thread.CurrentThread.ManagedThreadId);
                    }
                );
            }
            // No exception is expected in this example, but if one is still thrown from a task,
            // it will be wrapped in AggregateException and propagated to the main thread.
            catch (AggregateException e)
            {
                Console.WriteLine("An action has thrown an exception. THIS WAS UNEXPECTED.\n{0}", e.InnerException.ToString());
            }
        }

        static void BasicAction()
        {
            Console.WriteLine("Method=alpha, Thread={0}", Thread.CurrentThread.ManagedThreadId);
        }
    }
Imports System.Threading
Imports System.Threading.Tasks

Module InvokeDemo

    ' Demonstrated features:
    '   Parallel.Invoke()
    ' Expected results:
    '   The threads on which each task gets executed may be different.
    '   The thread assignments may be different in different executions.
    '   The tasks may get executed in any order.
    ' Documentation:
    '   http://msdn.microsoft.com/library/dd783942(VS.100).aspx
    Private Sub Main()
        Try
            ' Param #0 - static method
            Parallel.Invoke(AddressOf BasicAction,
                            Sub()
                                ' Param #1 - lambda expression
                                Console.WriteLine("Method=beta, Thread={0}", Thread.CurrentThread.ManagedThreadId)
                            End Sub,
                            Sub()
                                ' Param #2 - in-line delegate
                                Console.WriteLine("Method=gamma, Thread={0}", Thread.CurrentThread.ManagedThreadId)
                            End Sub)
        Catch e As AggregateException
            ' No exception is expected in this example, but if one is still thrown from a task,
            ' it will be wrapped in AggregateException and propagated to the main thread.
            Console.WriteLine("An action has thrown an exception. THIS WAS UNEXPECTED." & vbLf & "{0}", e.InnerException.ToString())
        End Try
    End Sub

    Private Sub BasicAction()
        Console.WriteLine("Method=alpha, Thread={0}", Thread.CurrentThread.ManagedThreadId)
    End Sub



End Module

Комментарии

Этот метод можно использовать для параллельного выполнения набора операций.

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

Дополнительные сведения см. в разделе Практическое руководство. Использование Parallel.Invoke для выполнения параллельных операций.

Применяется к

Invoke(ParallelOptions, Action[])

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет каждое из указанных действий, возможно, параллельно, если операция не отменена пользователем.

public:
 static void Invoke(System::Threading::Tasks::ParallelOptions ^ parallelOptions, ... cli::array <Action ^> ^ actions);
public static void Invoke(System.Threading.Tasks.ParallelOptions parallelOptions, params Action[] actions);
static member Invoke : System.Threading.Tasks.ParallelOptions * Action[] -> unit
Public Shared Sub Invoke (parallelOptions As ParallelOptions, ParamArray actions As Action())

Параметры

parallelOptions
ParallelOptions

Объект, который настраивает поведение этой операции.

actions
Action[]

Массив выполняемых действий.

Исключения

В CancellationToken наборе parallelOptions .

Аргумент actions имеет значение null.

–или–

Аргумент parallelOptions имеет значение null.

Исключение, которое возникает, когда любое действие в массиве actions создает исключение.

Массив actions содержит null элемент.

Связанный CancellationTokenSourceCancellationToken с ним parallelOptions объект удален.

Комментарии

Этот метод можно использовать для параллельного выполнения набора операций. Маркер отмены, переданный со ParallelOptions структурой, позволяет вызывающей службе отменить всю операцию. Дополнительные сведения см. в разделе Отмена в управляемых потоках.

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

Дополнительные сведения см. в разделе Практическое руководство. Использование Parallel.Invoke для выполнения параллельных операций.

Применяется к