Freigeben über


DataflowBlock.Encapsulate<TInput,TOutput> Methode

Definition

Kapselt ein Ziel und eine Quelle in eine einzelne Propagierung.

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)

Typparameter

TInput

Gibt den Typ der Eingabe an, die vom Ziel erwartet wird.

TOutput

Gibt den Typ der Ausgabe an, die von der Quelle erzeugt wurde.

Parameter

target
ITargetBlock<TInput>

Das zu kapselnde Ziel

source
ISourceBlock<TOutput>

Die zu kapselnde Quelle.

Gibt zurück

Die gekapselte Quelle und Ziel.

Hinweise

Die Encapsulate Methode erfordert zwei vorhandene Blöcke: einen Zielblock (eine Instanz einer Klasse, die implementiert ITargetBlock<TInput>) und einen Quellblock (eine Instanz einer Klasse, die implementiert ISourceBlock<TOutput>). Encapsulate erstellt eine neue Instanz einer internen Klasse, die die ITargetBlock<TInput> Schnittstellenmember mit dem target Parameter und die ISourceBlock<TOutput> Schnittstellenmember mit dem source Parameter verbindet. ISourceBlock<TOutput> Sowohl als auch ITargetBlock<TInput> abgeleitet von IDataflowBlock. Blockvervollständigen wird explizit von Quellen an Ziele übergeben. Daher sind die Complete Methoden und Fault mit dem Ziel verbunden, während die Completion -Eigenschaft mit der Quelle verbunden ist. Sie müssen sicherstellen, dass nach Abschluss der Zielhälfte die Quellhälfte in der am besten geeigneten Weise abgeschlossen wird. Zum Beispiel:

target.Completion.ContinueWith(completion => source.Complete());

Wenn Sie den Vervollständigungstyp weitergeben möchten, können Sie diesen komplexeren Code verwenden:

target.Completion.ContinueWith(completion => { if (completion.IsFaulted)    

((IDataflowBlock)batchBlock).Fault(completion.Exception);   
else   
batchBlock.Complete();   
});  

Außerdem müssen Sie die Nachrichtenweitergabe vom Ziel an die Quelle explizit bereitstellen. Der Vorteil dieser expliziten Verbindung besteht darin, dass Sie die Freiheit haben, jede nicht eingeschränkte Verarbeitung zwischen den beiden gekapselten Blöcken durchzuführen. Dazu können Sie entweder die erforderliche Verarbeitung in die Delegaten der Blöcke codieren (wenn die Blöcke Delegaten annehmen), oder indem Sie ein Unternetzwerk von Blöcken zwischen ihnen einbetten. Die einfachere Möglichkeit besteht darin, einen Block zu verwenden, der Delegaten akzeptiert. Verwenden Sie ActionBlock<TInput>beispielsweise , TransformBlock<TInput,TOutput>, TransformManyBlock<TInput,TOutput> (falls zutreffend) oder einen benutzerdefinierten Block.

Gilt für: