Sdílet prostřednictvím


Parallel.Invoke Metoda

Definice

Provede každou z poskytnutých akcí, případně paralelně.

Přetížení

Invoke(Action[])

Provede každou z poskytnutých akcí, případně paralelně.

Invoke(ParallelOptions, Action[])

Provede každou z poskytnutých akcí, případně paralelně, pokud uživatel operaci nezruší.

Invoke(Action[])

Provede každou z poskytnutých akcí, případně paralelně.

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 se má provést.

Výjimky

Argument actions je null.

Výjimka, která se vyvolá, když jakákoli akce v actions poli vyvolá výjimku.

Pole actions obsahuje null prvek.

Příklady

Tento příklad ukazuje, jak používat metodu Invoke s jinými metodami, anonymními delegáty a výrazy lambda.

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 ke spuštění sady operací, potenciálně paralelně.

Nejsou provedeny žádné záruky týkající se pořadí, ve kterém se operace provádějí, nebo zda se provádějí paralelně. Tato metoda se nevrací, dokud se nedokončily všechny poskytnuté operace bez ohledu na to, jestli dojde k dokončení z důvodu normálního nebo výjimečného ukončení.

Další informace naleznete v tématu Postupy: Použití Parallel.Invoke ke spouštění paralelních operací.

Platí pro

Invoke(ParallelOptions, Action[])

Provede každou z poskytnutých akcí, případně paralelně, pokud uživatel operaci nezruší.

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

Parametry

parallelOptions
ParallelOptions

Objekt, který konfiguruje chování této operace.

actions
Action[]

Pole akcí, které se mají provést.

Výjimky

V CancellationToken sadě parallelOptions je nastavená hodnota.

Argument actions je null.

-nebo- Argument parallelOptions je null.

Výjimka, která se vyvolá, když jakákoli akce v actions poli vyvolá výjimku.

Pole actions obsahuje null prvek.

Spojené CancellationTokenSource s CancellationToken vyřazením parallelOptions .

Poznámky

Tuto metodu lze použít ke spuštění sady operací, potenciálně paralelně. Token zrušení předaný se strukturou ParallelOptions umožňuje volajícímu zrušit celou operaci. Další informace najdete v tématu Zrušení ve spravovaných vláknech.

Nejsou provedeny žádné záruky týkající se pořadí, ve kterém se operace provádějí, nebo zda se provádějí paralelně. Tato metoda se nevrací, dokud se nedokončily všechny poskytnuté operace bez ohledu na to, jestli dojde k dokončení z důvodu normálního nebo výjimečného ukončení.

Další informace naleznete v tématu Postupy: Použití Parallel.Invoke ke spouštění paralelních operací.

Platí pro