DataflowBlock.Encapsulate<TInput,TOutput> Metódus

Definíció

Egy cél és egy forrás beágyazása egyetlen propagátorba.

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)

Típusparaméterek

TInput

Megadja a cél által várt bemenet típusát.

TOutput

A forrás által előállított kimenet típusát adja meg.

Paraméterek

target
ITargetBlock<TInput>

A beágyazandó cél.

source
ISourceBlock<TOutput>

A beágyazandó forrás.

Válaszok

A beágyazott cél és forrás.

Megjegyzések

A Encapsulate metódushoz két meglévő blokkra van szükség: egy célblokkra (egy implementálható ITargetBlock<TInput>osztály példányára) és egy forrásblokkra (egy implementálható ISourceBlock<TOutput>osztály példányára). Encapsulate Létrehoz egy új belső osztálypéldányt, amely összekapcsolja az ITargetBlock<TInput> illesztőtagokat a target paraméterrel és a ISourceBlock<TOutput> felülettagokat a source paraméterrel. Mindkettő ITargetBlock<TInput> és ISourceBlock<TOutput> származtatva.IDataflowBlock A blokkkiegészítést a források explicit módon továbbítják a céloknak. Ezért a metódusok és Complete a Fault metódusok a célhoz kapcsolódnak, miközben a Completion tulajdonság a forráshoz csatlakozik. Gondoskodnia kell arról, hogy amikor a cél fele befejeződik, a forrás fele a legmegfelelőbb módon fejeződjön be; például:

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

Vagy ha propagálja a befejezési típust, használhatja ezt a kifinomultabb kódot:

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

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

Explicit módon kell megadnia az üzenet propagálását a célról a forrásra. Ennek az explicit kapcsolatnak az az előnye, hogy lehetővé teszi a két beágyazott blokk közötti korlátozás nélküli feldolgozást. Ezt megteheti a szükséges feldolgozás kódolásával a blokkok meghatalmazottjaiba (ha a blokkok delegáltakat fogadnak), vagy a blokkok alhálózatának beágyazásával. A legegyszerűbb módszer egy olyan blokk használata, amely a meghatalmazottakat veszi igénybe; például használjon ActionBlock<TInput>, TransformBlock<TInput,TOutput>, TransformManyBlock<TInput,TOutput> (ha van) vagy egyéni blokkot.

A következőre érvényes: