DataflowBlock.Encapsulate<TInput,TOutput> 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將目標和來源封裝成單一傳播程式。
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)
類型參數
- TInput
指定目標所預期的輸入型別。
- TOutput
指定來源所產生的輸出類型。
參數
- target
- ITargetBlock<TInput>
要封裝的目標
- source
- ISourceBlock<TOutput>
要封裝的來源。
傳回
封裝的目標和來源。
備註
方法 Encapsulate 需要兩個現有的區塊:目標區塊 (實作) 的類別 ITargetBlock<TInput> 實例,而來源區塊 (實 ISourceBlock<TOutput> 作) 類別的實例。
Encapsulate 會建立內部類別的新實例,將 ITargetBlock<TInput> 介面成員連接到 target
參數,並將 ISourceBlock<TOutput> 介面成員連接到 source
參數。 和 ISourceBlock<TOutput> 都 ITargetBlock<TInput> 衍生自 IDataflowBlock 。 區塊自動完成會從來源明確傳遞至目標。 因此, Complete 和 Fault 方法會在 屬性連接到來源時 Completion 連接到目標。 您必須確定當目標半完成時,來源一半會以最適當的方式完成;例如:
target.Completion.ContinueWith(completion => source.Complete());
或者,如果您想要傳播完成類型,可以使用這個更複雜的程式碼:
target.Completion.ContinueWith(completion => { if (completion.IsFaulted)
((IDataflowBlock)batchBlock).Fault(completion.Exception);
else
batchBlock.Complete();
});
您也必須明確提供從目標傳播到來源的訊息。 此明確連線的優點是可讓您自由地在兩個封裝的區塊之間執行任何不受限制的處理。 您可以將必要的處理編碼成區塊的委派, (如果區塊接受委派) ,或藉由在區塊之間內嵌區塊的子網路,即可這麼做。 最簡單的方式是使用接受委派的區塊;例如,如果適用) 或自訂區塊,請使用 ActionBlock<TInput> 、 TransformBlock<TInput,TOutput>TransformManyBlock<TInput,TOutput> 、 (。