Partilhar via


PipelineComponent.IsInputReady(Int32[], Boolean[]) Método

Definição

Determina quais das entradas anexadas a um componente estão aguardando mais dados, e quais têm dados suficientes para processar e estão bloqueadas.

public:
 virtual void IsInputReady(cli::array <int> ^ inputIDs, cli::array <bool> ^ % canProcess);
public virtual void IsInputReady (int[] inputIDs, ref bool[] canProcess);
abstract member IsInputReady : int[] * Boolean[] -> unit
override this.IsInputReady : int[] * Boolean[] -> unit
Public Overridable Sub IsInputReady (inputIDs As Integer(), ByRef canProcess As Boolean())

Parâmetros

inputIDs
Int32[]

Uma matriz das IDs das entradas anexadas ao componente.

canProcess
Boolean[]

Uma matriz de valores boolianos que indicam se cada entrada está aguardando mais dados (true) ou é bloqueada (false), passada por referência.

Exemplos

No exemplo a seguir, a implementação do método IsInputReady indica que uma entrada estará esperando receber mais dados se as seguintes condições forem verdadeiras:

  • Mais dados upstream estão disponíveis para a entrada (!inputEOR).

  • O componente não tem dados disponíveis no momento para processar a entrada nos buffers que o componente já recebeu (inputBuffers[inputIndex].CurrentRow() == null).

Se uma entrada estiver esperando receber mais dados, o componente de fluxo de dados indicará isso por meio da definição do valor do elemento como true na matriz canProcess correspondente àquela entrada.

De modo oposto, quando o componente ainda tem dados disponíveis para processar para a entrada, o exemplo suspende o processamento da entrada. O exemplo faz isso por meio da definição como false do valor do elemento na matriz canProcess correspondente àquela entrada.

public override void IsInputReady(int[] inputIDs, ref bool[] canProcess)  
{  
    for (int i = 0; i < inputIDs.Length; i++)  
    {  
        int inputIndex = ComponentMetaData.InputCollection.GetObjectIndexByID(inputIDs[i]);  

        canProcess[i] = (inputBuffers[inputIndex].CurrentRow() == null)  
            && !inputEOR[inputIndex];  
    }  
}  

O exemplo anterior usa a matriz booliana inputEOR para indicar se dados upstream estão disponíveis para cada entrada. EOR no nome da matriz representa "término de conjunto de linhas" e faz referência à propriedade EndOfRowset de buffers de fluxo de dados. Em uma parte do exemplo que não é incluída aqui, o método ProcessInput verifica o valor da propriedade EndOfRowset de cada buffer de dados que recebe. Quando um valor indica true que não há mais dados upstream disponíveis para uma entrada, o exemplo define o valor para inputEORtrue essa entrada. Essa implementação do IsInputReady método define o valor correspondente na canProcess matriz para false uma entrada quando o valor indica inputEOR que não há mais dados upstream disponíveis para a entrada.

Comentários

Quando você define o valor da Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure propriedade como true no DtsPipelineComponentAttribute, você também deve fornecer uma implementação para o IsInputReady método.

O mecanismo de fluxo de dados chama o IsInputReady método para determinar quais entradas estão aguardando para receber mais dados. Na implementação desse método, você define o status de cada uma das entradas do componente na matriz booliana canProcess . (As entradas são identificadas por seus valores de ID na inputIDs matriz.) Quando você define o valor de uma entrada na truecanProcess matriz, o mecanismo de fluxo de dados chama o método do ProcessInput componente e fornece mais dados para a entrada especificada.

Embora mais dados upstream estejam disponíveis, o valor de pelo menos uma entrada deve estar true sempre na matriz ou paradas canProcess de processamento.

Para obter mais informações sobre o tratamento do uso excessivo de memória se as entradas de um componente de fluxo de dados personalizado produzirem dados em taxas desiguais, consulte Desenvolver componentes Поток данных com várias entradas.

Aplica-se a