DataflowBlock.Encapsulate<TInput,TOutput> Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Incapsula una destinazione e un'origine in un unico propagatore.
public:
generic <typename TInput, typename TOutput>
static System::Threading::Tasks::Dataflow::IPropagatorBlock<TInput, TOutput> ^ Encapsulate(System::Threading::Tasks::Dataflow::ITargetBlock<TInput> ^ target, System::Threading::Tasks::Dataflow::ISourceBlock<TOutput> ^ source);
public static System.Threading.Tasks.Dataflow.IPropagatorBlock<TInput,TOutput> Encapsulate<TInput,TOutput> (System.Threading.Tasks.Dataflow.ITargetBlock<TInput> target, System.Threading.Tasks.Dataflow.ISourceBlock<TOutput> source);
static member Encapsulate : System.Threading.Tasks.Dataflow.ITargetBlock<'Input> * System.Threading.Tasks.Dataflow.ISourceBlock<'Output> -> System.Threading.Tasks.Dataflow.IPropagatorBlock<'Input, 'Output>
Public Function Encapsulate(Of TInput, TOutput) (target As ITargetBlock(Of TInput), source As ISourceBlock(Of TOutput)) As IPropagatorBlock(Of TInput, TOutput)
Parametri di tipo
- TInput
Specifica il tipo di input previsto dal blocco di destinazione.
- TOutput
Specifica il tipo di output prodotto dall'origine.
Parametri
- target
- ITargetBlock<TInput>
Destinazione da incapsulare.
- source
- ISourceBlock<TOutput>
Origine da incapsulare.
Restituisce
Destinazione e origine incapsulate.
Commenti
Il Encapsulate metodo richiede due blocchi esistenti: un blocco di destinazione (un'istanza di una classe che implementa ITargetBlock<TInput>) e un blocco di origine (un'istanza di una classe che implementa ISourceBlock<TOutput>).
Encapsulate crea una nuova istanza di una classe interna che connette i membri dell'interfaccia ITargetBlock<TInput> al target
parametro e i membri dell'interfaccia ISourceBlock<TOutput> al source
parametro . Sia che ITargetBlock<TInput>ISourceBlock<TOutput> derivano da IDataflowBlock. Il completamento del blocco viene passato in modo esplicito dalle origini alle destinazioni. Pertanto, i Complete metodi e Fault sono connessi alla destinazione mentre la Completion proprietà è connessa all'origine. È necessario assicurarsi che quando la metà di destinazione viene completata, la metà dell'origine viene completata nel modo più appropriato; Per esempio:
target.Completion.ContinueWith(completion => source.Complete());
In alternativa, se si vuole propagare il tipo di completamento, è possibile usare questo codice più sofisticato:
target.Completion.ContinueWith(completion => { if (completion.IsFaulted)
((IDataflowBlock)batchBlock).Fault(completion.Exception);
else
batchBlock.Complete();
});
È inoltre necessario specificare in modo esplicito la propagazione dei messaggi dalla destinazione all'origine. Il vantaggio di questa connessione esplicita è che consente di eseguire qualsiasi elaborazione senza vincoli tra i due blocchi incapsulati. È possibile eseguire questa operazione codificando l'elaborazione necessaria nei delegati dei blocchi (se i blocchi accettano delegati) o incorporando una rete secondaria di blocchi tra di essi. Il modo più semplice consiste nell'usare un blocco che accetta delegati; Ad esempio, usare ActionBlock<TInput>, TransformBlock<TInput,TOutput>( TransformManyBlock<TInput,TOutput> se applicabile) o un blocco personalizzato.