Aracılığıyla paylaş


DataflowBlock.Encapsulate<TInput,TOutput> Yöntem

Tanım

Hedefi ve kaynağı tek bir yayıcıya kapsüller.

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ür Parametreleri

TInput

Hedef tarafından beklenen giriş türünü belirtir.

TOutput

Kaynak tarafından üretilen çıktı türünü belirtir.

Parametreler

target
ITargetBlock<TInput>

Kapsülleme hedefi.

source
ISourceBlock<TOutput>

Kapsülleme kaynağı.

Döndürülenler

Kapsüllenmiş hedef ve kaynak.

Açıklamalar

Encapsulate yöntemi iki mevcut blok gerektirir: hedef blok (uygulayan ITargetBlock<TInput>bir sınıfın örneği) ve bir kaynak blok (uygulayan ISourceBlock<TOutput>bir sınıfın örneği). Encapsulate, arabirim üyelerini parametresine ve arabirim üyelerini parametresine target bağlayan ITargetBlock<TInput> iç sınıfın ISourceBlock<TOutput> yeni bir örneğini source oluşturur. ISourceBlock<TOutput> Hem hem de ITargetBlock<TInput> 'den IDataflowBlocktüretilir. Blok tamamlama açıkça kaynaklardan hedeflere geçirilir. Bu nedenle, Complete özelliği kaynağa bağlıyken Completion ve Fault yöntemleri hedefe bağlanır. Hedef yarısı tamamlandığında kaynak yarısının en uygun şekilde tamamlandığından emin olmanız gerekir; örneğin:

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

Ya da tamamlama türünü yaymak istiyorsanız, bu daha karmaşık kodu kullanabilirsiniz:

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

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

Ayrıca ileti yayma işlemini hedeften kaynağa açıkça sağlamanız gerekir. Bu açık bağlantının avantajı, kapsüllenmiş iki blok arasında sınırsız işlem gerçekleştirme özgürlüğü sağlamasıdır. Bunu, gerekli işlemleri blokların temsilcilerine kodlayarak (bloklar temsilci alıyorsa) veya aralarında bir blok alt ağı ekleyerek yapabilirsiniz. Bunun daha kolay yolu, temsilcileri alan bir blok kullanmaktır; örneğin, , , TransformBlock<TInput,TOutput>TransformManyBlock<TInput,TOutput> (varsa) veya özel bir blok kullanınActionBlock<TInput>.

Şunlara uygulanır