Parallel.Invoke Metoda

Definice

Provede každou ze zadaných akcí paralelně.Executes each of the provided actions, possibly in parallel.

Přetížení

Invoke(Action[])

Provede každou ze zadaných akcí paralelně.Executes each of the provided actions, possibly in parallel.

Invoke(ParallelOptions, Action[])

Spustí všechny poskytnuté akce, například paralelně, pokud není operace zrušena uživatelem.Executes each of the provided actions, possibly in parallel, unless the operation is cancelled by the user.

Invoke(Action[])

Provede každou ze zadaných akcí paralelně.Executes each of the provided actions, possibly in parallel.

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())

Parametry

actions
Action[]

Pole, které Action má být provedeno.An array of Action to execute.

Výjimky

actions Argument jenull.The actions argument is null.

Výjimka, která je vyvolána, když jakákoli akce v actions poli vyvolá výjimku.The exception that is thrown when any action in the actions array throws an exception.

actions Polenull obsahuje element.The actions array contains a null element.

Příklady

Tento příklad ukazuje, jak použít Invoke metodu s jinými metodami, anonymními delegáty a lambda výrazy.This example demonstrates how to use the Invoke method with other methods, anonymous delegates, and lambda expressions.

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

Poznámky

Tuto metodu lze použít k provedení sady operací, potenciálně paralelně.This method can be used to execute a set of operations, potentially in parallel.

Neudělaly se žádné záruky týkající se pořadí, ve kterém se operace spouštějí, nebo bez ohledu na to, jestli se spouštějí paralelně.No guarantees are made about the order in which the operations execute or whether they execute in parallel. Tato metoda nevrátí hodnotu, dokud se nedokončí všechny poskytnuté operace bez ohledu na to, zda k dokončení dojde z důvodu normálního nebo mimořádného ukončení.This method does not return until each of the provided operations has completed, regardless of whether completion occurs due to normal or exceptional termination.

Další informace najdete v tématu jak: K provedení paralelních operacípoužijte paralelní. Invoke.For more information, see How to: Use Parallel.Invoke to Execute Parallel Operations.

Invoke(ParallelOptions, Action[])

Spustí všechny poskytnuté akce, například paralelně, pokud není operace zrušena uživatelem.Executes each of the provided actions, possibly in parallel, unless the operation is cancelled by the user.

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

Parametry

parallelOptions
ParallelOptions

Objekt, který konfiguruje chování této operace.An object that configures the behavior of this operation.

actions
Action[]

Pole akcí, které mají být provedeny.An array of actions to execute.

Výjimky

CancellationToken VparallelOptions je nastaven.The CancellationToken in the parallelOptions is set.

actions Argument jenull.The actions argument is null.

-nebo--or- parallelOptions Argument jenull.The parallelOptions argument is null.

Výjimka, která je vyvolána, když jakákoli akce v actions poli vyvolá výjimku.The exception that is thrown when any action in the actions array throws an exception.

actions Polenull obsahuje element.The actions array contains a null element.

Přidruženo CancellationToken k vparallelOptions je zrušeno. CancellationTokenSourceThe CancellationTokenSource associated with the CancellationToken in the parallelOptions has been disposed.

Poznámky

Tuto metodu lze použít k provedení sady operací, potenciálně paralelně.This method can be used to execute a set of operations, potentially in parallel. Token zrušení předaný pomocí ParallelOptions struktury umožňuje volajícímu zrušit celou operaci.The cancellation token passed in with the ParallelOptions structure enables the caller to cancel the entire operation. Další informace naleznete v tématu zrušení ve spravovaných vláknech.For more information, see Cancellation in Managed Threads.

Neudělaly se žádné záruky týkající se pořadí, ve kterém se operace spouštějí, nebo bez ohledu na to, jestli se spouštějí paralelně.No guarantees are made about the order in which the operations execute or whether they execute in parallel. Tato metoda nevrátí hodnotu, dokud se nedokončí všechny poskytnuté operace bez ohledu na to, zda k dokončení dojde z důvodu normálního nebo mimořádného ukončení.This method does not return until each of the provided operations has completed, regardless of whether completion occurs due to normal or exceptional termination.

Další informace najdete v tématu jak: K provedení paralelních operacípoužijte paralelní. Invoke.For more information, see How to: Use Parallel.Invoke to Execute Parallel Operations.

Platí pro