DataflowBlock.Encapsulate<TInput,TOutput> 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.
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.