Parallel.Invoke Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wykonuje każdą z podanych akcji, prawdopodobnie równolegle.
Przeciążenia
| Invoke(Action[]) |
Wykonuje każdą z podanych akcji, prawdopodobnie równolegle. |
| Invoke(ParallelOptions, Action[]) |
Wykonuje każdą z podanych akcji, prawdopodobnie równolegle, chyba że operacja zostanie anulowana przez użytkownika. |
Invoke(Action[])
Wykonuje każdą z podanych akcji, prawdopodobnie równolegle.
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
Wyjątki
Argumentem actions jest null.
Wyjątek zgłaszany, gdy jakakolwiek akcja w tablicy actions zgłasza wyjątek.
Tablica actions zawiera null element .
Przykłady
W tym przykładzie pokazano, jak używać Invoke metody z innymi metodami, anonimowymi delegatami i wyrażeniami 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
Uwagi
Ta metoda może służyć do wykonywania zestawu operacji, potencjalnie równolegle.
Nie są podejmowane żadne gwarancje dotyczące kolejności, w jakiej są wykonywane operacje lub czy są wykonywane równolegle. Ta metoda nie zwraca się do momentu ukończenia każdej z podanych operacji, niezależnie od tego, czy ukończenie ma miejsce z powodu normalnego, czy wyjątkowego zakończenia.
Aby uzyskać więcej informacji, zobacz How to: Use Parallel.Invoke to Execute Parallel Operations (Instrukcje: używanie metody Parallel.Invoke do wykonywania operacji równoległych).
Dotyczy
Invoke(ParallelOptions, Action[])
Wykonuje każdą z podanych akcji, prawdopodobnie równolegle, chyba że operacja zostanie anulowana przez użytkownika.
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
Obiekt, który konfiguruje zachowanie tej operacji.
- actions
- Action[]
Tablica akcji do wykonania.
Wyjątki
Właściwość CancellationToken w obiekcie jest ustawiona parallelOptions .
Wyjątek zgłaszany, gdy jakakolwiek akcja w tablicy actions zgłasza wyjątek.
Tablica actions zawiera null element .
Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions został usunięty.
Uwagi
Ta metoda może służyć do wykonywania zestawu operacji, potencjalnie równolegle. Token anulowania przekazany ze strukturą ParallelOptions umożliwia obiektowi wywołującym anulowanie całej operacji. Aby uzyskać więcej informacji, zobacz Anulowanie w zarządzanych wątkach.
Nie są podejmowane żadne gwarancje dotyczące kolejności, w jakiej są wykonywane operacje lub czy są wykonywane równolegle. Ta metoda nie zwraca się do momentu ukończenia każdej z podanych operacji, niezależnie od tego, czy ukończenie ma miejsce z powodu normalnego, czy wyjątkowego zakończenia.
Aby uzyskać więcej informacji, zobacz How to: Use Parallel.Invoke to Execute Parallel Operations (Instrukcje: używanie metody Parallel.Invoke do wykonywania operacji równoległych).