Parallel.Invoke Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
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.
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í.