DataflowBlock.Encapsulate<TInput,TOutput> 메서드

정의

대상 및 소스를 단일 전파자로 캡슐화합니다.

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>

캡슐화할 소스입니다.

반환

IPropagatorBlock<TInput,TOutput>

캡슐화된 대상 및 원본입니다.

설명

Encapsulate 메서드에는 대상 블록(구현하는 클래스의 인스턴스) 및 소스 블록(구현ITargetBlock<TInput>ISourceBlock<TOutput>하는 클래스의 인스턴스)의 두 개의 기존 블록이 필요합니다. Encapsulate 는 인터페이스 멤버를 매개 변수에 ITargetBlock<TInput> 연결하고 인터페이스 멤버를 매개 변수에 target 연결하는 내부 클래스의 ISourceBlock<TOutput> 새 인스턴스를 source 만듭니다. 둘 다 ITargetBlock<TInput> 에서 ISourceBlock<TOutput> 파생 IDataflowBlock합니다. 블록 완성은 소스에서 대상으로 명시적으로 전달됩니다. 따라서 속성이 원본에 Complete 연결된 동안 CompletionFault 메서드가 대상에 연결됩니다. 대상 절반이 완료되면 원본 절반이 가장 적절한 방식으로 완료되는지 확인해야 합니다. 예를 들어:

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

또는 완성 형식을 전파하려는 경우 이 보다 정교한 코드를 사용할 수 있습니다.

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

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

또한 메시지 전파를 대상에서 원본으로 명시적으로 제공해야 합니다. 이 명시적 연결의 이점은 캡슐화된 두 블록 간에 제한되지 않은 처리를 자유롭게 수행할 수 있다는 것입니다. 블록의 대리자(블록이 대리자를 사용하는 경우)에 필요한 처리를 인코딩하거나 블록 간에 블록의 하위 네트워크를 포함하면 됩니다. 더 쉬운 방법은 대리자를 사용하는 블록을 사용하는 것입니다. 예를 들어 , ( TransformBlock<TInput,TOutput>TransformManyBlock<TInput,TOutput> 해당하는 경우) 또는 사용자 지정 블록을 사용합니다ActionBlock<TInput>.

적용 대상