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

Definição

Determina quais entradas conectadas a um componente estão esperando mais dados, quais têm dados suficientes para processar e estão bloqueados.

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[]

Um array dos IDs das entradas conectadas ao componente.

canProcess
Boolean[]

Um array de valores booleanos que indicam se cada entrada está esperando por mais dados (verdadeiro) ou está bloqueada (falso), passada por referência.

Exemplos

No exemplo a seguir, a implementação do IsInputReady método indica que uma entrada está aguardando para receber mais dados quando as seguintes condições são verdadeiras:

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

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

Se uma entrada estiver aguardando receber mais dados, o componente de fluxo de dados indica isso definindo para true o valor do elemento no canProcess array que corresponde àquela entrada.

Por outro lado, quando o componente ainda tem dados disponíveis para processar para a entrada, o exemplo suspende o processamento da entrada. O exemplo faz isso definindo para false o valor do elemento no canProcess array que corresponde à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 o array booleano inputEOR para indicar se há mais dados a montante disponíveis para cada entrada. EOR no nome do array representa "fim de rowset" e refere-se à EndOfRowset propriedade dos buffers de fluxo de dados. Em uma parte do exemplo que não está incluída aqui, o ProcessInput método verifica o valor da EndOfRowset propriedade para cada buffer de dados que recebe. Quando um valor de true indica que não há mais dados a montante disponíveis para uma entrada, o exemplo define o valor de inputEOR para true essa entrada. Essa implementação do IsInputReady método define o valor correspondente no canProcess array para false uma entrada quando o valor de inputEOR indica que não há mais dados a montante disponíveis para a entrada.

Comentários

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

O motor de fluxo de dados chama o IsInputReady método para determinar quais entradas estão esperando receber mais dados. Na sua implementação desse método, você define o status de cada entrada do componente no array booleano canProcess . (As entradas são identificadas por seus valores de identificação no inputIDs array.) Quando você define o valor de uma entrada para true no canProcess array, o motor de fluxo de dados chama o método do ProcessInput componente e fornece mais dados para a entrada especificada.

Embora haja mais dados a montante, o valor de pelo menos uma entrada deve sempre estar true no canProcess array, ou o processamento para.

Para mais informações sobre o manejo do uso excessivo de memória caso as entradas de um componente custom data flow produzam dados em taxas irregulares, veja Developing Fluxo de Dados Components with Multiple Inputs.

Aplica-se a