Compartir a través de


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

Definición

Determina cuáles de las entradas adjuntas a un componente están esperando recibir más datos y cuáles tienen suficientes datos para procesar y están 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[]

Matriz de los identificadores de las entradas adjuntas al componente.

canProcess
Boolean[]

Matriz de valores booleanos que indican si cada entrada está esperando más datos (true) o está bloqueado (false), pasado por referencia.

Ejemplos

En el siguiente ejemplo, la implementación del método IsInputReady indica que una entrada está esperando recibir más datos cuando se cumplen las condiciones siguientes:

  • Los datos de nivel superior están disponibles para la entrada (!inputEOR).

  • El componente no tiene los datos disponibles actualmente para procesar la entrada en los búferes que el componente ya haya recibido (inputBuffers[inputIndex].CurrentRow() == null).

Si una entrada espera recibir más datos, el componente de flujo de datos lo indica estableciendo en true el valor del elemento en la matriz canProcess que corresponde a esa entrada.

Por el contrario, cuando el componente todavía tiene los datos disponibles para procesar la entrada, el ejemplo suspende su procesamiento. Para ello, en el ejemplo se establece en false el valor del elemento en la matriz canProcess que corresponde a esa 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];  
    }  
}  

El ejemplo anterior utiliza la matriz inputEOR de tipo Boolean para indicar si los datos de nivel superior están disponibles para cada entrada. EOR en el nombre de la matriz representa "fin del conjunto de filas" y hace referencia a la propiedad EndOfRowset de los búferes del flujo de datos. En una parte del ejemplo que no está incluido aquí, el método ProcessInput comprueba el valor de la propiedad EndOfRowset cada búfer de datos que recibe. Cuando un valor de true indica que no hay más datos ascendentes disponibles para una entrada, el ejemplo establece el valor de inputEOR en true para esa entrada. Esta implementación del IsInputReady método establece el valor correspondiente de la canProcess matriz false en para una entrada cuando el valor de inputEOR indica que no hay más datos ascendentes disponibles para la entrada.

Comentarios

Al establecer el valor de la Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure propiedad en en DtsPipelineComponentAttribute, también debe proporcionar una implementación para el IsInputReadytrue método .

El motor de flujo de datos llama al IsInputReady método para determinar qué entradas están esperando recibir más datos. En la implementación de este método, se establece el estado de cada una de las entradas del componente en la matriz booleana canProcess . (Las entradas se identifican mediante sus valores de identificador en la inputIDs matriz). Al establecer el valor de una entrada true en en la canProcess matriz, el motor de flujo de datos llama al método del ProcessInput componente y proporciona más datos para la entrada especificada.

Aunque hay más datos ascendentes disponibles, el valor de al menos una entrada debe estar true siempre en la canProcess matriz o el procesamiento se detiene.

Para obtener más información sobre el control del uso excesivo de memoria si las entradas de un componente de flujo de datos personalizado producen datos a velocidades desiguales, consulte Desarrollo de componentes de Data Flow con varias entradas.

Se aplica a