PipelineComponent.IsInputReady(Int32[], Boolean[]) 方法

定义

确定附加到某个组件的哪些输入正在等待更多数据,并且确定哪些输入具有可供处理的足够数据和被阻塞。

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())

参数

inputIDs
Int32[]

附加到组件的输入的 ID 的数组。

canProcess
Boolean[]

一个布尔值的数组,指示每个输入是否在等待更多数据 (true) ,还是被阻止 (false) (按引用传递)。

示例

在下面的示例中,IsInputReady 方法的实现方式指示在以下条件成立时某个输入正在等待接收更多数据:

  • 更多的上游数据可用于该输入 (!inputEOR)。

  • 在已接收该组件的缓冲区中,对于该输入该组件当前不具有可供处理的数据 (inputBuffers[inputIndex].CurrentRow() == null)。

如果某个输入正在等待接收更多数据,则数据流组件通过在与该输入相对应的 canProcess 数组中将该元素的值设置为 true,指示这一情况。

相反,在该组件对于该输入仍具有可供处理的数据时,该示例将挂起对该输入的处理。 为此,该示例将在与该输入相对应的 canProcess 数组中将该元素的值设置为 false

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];  
    }  
}  

前面的示例使用布尔型 inputEOR 数组指示是否有更多的上游数据可用于每个输入。 该数组名称中的 EOR 表示“行集结束”,并且引用数据流缓冲区的 EndOfRowset 属性。 在此处未包括的示例部分中,ProcessInput 方法为它接收的每个数据缓冲区检查 EndOfRowset 属性的值。 如果某个值 true 指示没有可用于输入的上游数据,则本示例将输入的值 inputEOR 设置为该 true 输入的值。 此方法 IsInputReady 的此实现将数组中的 canProcess 相应值设置为 false 输入值 inputEOR ,当指示没有可用于输入的上游数据时。

注解

将属性的值 Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure 设置为 true 其中 DtsPipelineComponentAttribute时,还必须为 IsInputReady 该方法提供实现。

数据流引擎调用 IsInputReady 该方法来确定哪些输入正在等待接收更多数据。 在此方法的实现中,设置布尔 canProcess 数组中每个组件的输入的状态。 (输入由数组中的 inputIDs ID 值标识。) 将输入的值设置为 true 数组中 canProcess 时,数据流引擎会调用组件 ProcessInput 的方法,并为指定的输入提供更多数据。

虽然有更多的上游数据可用,但至少一个输入的值必须始终位于 true 数组中 canProcess ,或者处理停止。

有关处理过多内存使用率的详细信息(如果自定义数据流组件的输入以不均匀的速度生成数据,请参阅使用多个输入开发数据流组件

适用于