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
만듭니다. 둘 다 ITargetBlock<TInput> 에서 ISourceBlock<TOutput> 파생 IDataflowBlock합니다. 블록 완성은 소스에서 대상으로 명시적으로 전달됩니다. 따라서 속성이 원본에 Complete 연결된 동안 Completion 및 Fault 메서드가 대상에 연결됩니다. 대상 절반이 완료되면 원본 절반이 가장 적절한 방식으로 완료되는지 확인해야 합니다. 예를 들어:
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>.