Parallel.Invoke Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Führt jede der bereitgestellten Aktionen aus (möglicherweise parallel).
Überlädt
Invoke(Action[]) |
Führt jede der bereitgestellten Aktionen aus (möglicherweise parallel). |
Invoke(ParallelOptions, Action[]) |
Führt die einzelnen bereitgestellten Aktionen (nach Möglichkeit parallel) aus, es sei denn, der Vorgang wird vom Benutzer abgebrochen. |
Invoke(Action[])
Führt jede der bereitgestellten Aktionen aus (möglicherweise 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())
Parameter
Ausnahmen
Das actions
-Argument lautet null
.
Diese Ausnahme wird ausgelöst, wenn eine beliebige Aktion im actions
-Array eine Ausnahme auslöst.
Ein actions
-Array enthält ein null
-Element.
Beispiele
In diesem Beispiel wird veranschaulicht, wie Sie die Invoke Methode mit anderen Methoden, anonymen Stellvertretungen und Lambdaausdrucken verwenden.
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
Hinweise
Diese Methode kann verwendet werden, um eine Reihe von Vorgängen auszuführen, möglicherweise parallel.
Es werden keine Garantien über die Reihenfolge vorgenommen, in der die Vorgänge ausgeführt werden oder ob sie parallel ausgeführt werden. Diese Methode gibt erst zurück, wenn jede der bereitgestellten Vorgänge abgeschlossen ist, unabhängig davon, ob die Fertigstellung aufgrund normaler oder außergewöhnlicher Beendigung auftritt.
Weitere Informationen finden Sie unter Vorgehensweise: Ausführen von parallelen Vorgängen mithilfe von „Parallel.Invoke“.
Gilt für
Invoke(ParallelOptions, Action[])
Führt die einzelnen bereitgestellten Aktionen (nach Möglichkeit parallel) aus, es sei denn, der Vorgang wird vom Benutzer abgebrochen.
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())
Parameter
- parallelOptions
- ParallelOptions
Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.
- actions
- Action[]
Ein Array auszuführender Aktionen.
Ausnahmen
Die CancellationToken im parallelOptions
ist festgelegt.
Das actions
-Argument lautet null
.
- oder -
Das parallelOptions
-Argument lautet null
.
Diese Ausnahme wird ausgelöst, wenn eine beliebige Aktion im actions
-Array eine Ausnahme auslöst.
Ein actions
-Array enthält ein null
-Element.
Die CancellationTokenSource, die der CancellationToken im parallelOptions
zugeordnet ist, ist gelöscht worden.
Hinweise
Diese Methode kann verwendet werden, um eine Reihe von Vorgängen auszuführen, möglicherweise parallel. Das mit der ParallelOptions Struktur übergebene Abbruchtoken ermöglicht es dem Aufrufer, den gesamten Vorgang abzubrechen. Weitere Informationen finden Sie unter Abbruch in verwalteten Threads.
Es werden keine Garantien über die Reihenfolge vorgenommen, in der die Vorgänge ausgeführt werden oder ob sie parallel ausgeführt werden. Diese Methode gibt erst zurück, wenn jede der bereitgestellten Vorgänge abgeschlossen ist, unabhängig davon, ob die Fertigstellung aufgrund normaler oder außergewöhnlicher Beendigung auftritt.
Weitere Informationen finden Sie unter Vorgehensweise: Ausführen von parallelen Vorgängen mithilfe von „Parallel.Invoke“.