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 çıkışın türünü belirtir.
Parametreler
- target
- ITargetBlock<TInput>
Kapsülleme hedefi.
- source
- ISourceBlock<TOutput>
Kapsüllendirecek kaynak.
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> bir 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 olmalısınız; örneğin:
target.Completion.ContinueWith(completion => source.Complete());
Veya 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 yaymayı 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üğü vermesidir. Bunu, gerekli işlemeyi blokların temsilcilerine kodlayarak (bloklar temsilci alıyorsa) veya aralarında bir blok alt ağı ekleyerek yapabilirsiniz. Daha kolay bir yol, temsilcileri alan bir blok kullanmaktır; örneğin, , , TransformBlock<TInput,TOutput>TransformManyBlock<TInput,TOutput> (varsa) veya özel bir blok kullanınActionBlock<TInput>.