DataflowBlock.Encapsulate<TInput,TOutput> Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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 ITargetBlock<TInput> bağlayan target iç sınıfın ISourceBlock<TOutput> yeni bir örneğini source oluşturur.
ITargetBlock<TInput> Hem hem de ISourceBlock<TOutput> 'den IDataflowBlocktüretilir. Blok tamamlama açıkça kaynaklardan hedeflere geçirilir. Bu nedenle, Complete özelliği kaynağa bağlıyken Fault ve Completion 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, , , ActionBlock<TInput>TransformBlock<TInput,TOutput> (varsa) veya özel bir blok kullanınTransformManyBlock<TInput,TOutput>.