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 çıkışın türünü belirtir.

Parametreler

target
ITargetBlock<TInput>

Kapsülleme hedefi.

source
ISourceBlock<TOutput>

Kapsüllendirecek kaynak.

Döndürülenler

IPropagatorBlock<TInput,TOutput>

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>.

Şunlara uygulanır