Поделиться через


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

Массив идентификаторов потоков входа, присоединенных к компоненту.

canProcess
Boolean[]

Массив логических значений, указывающий, ожидает ли каждый вход больше данных (true) или заблокирован (false), передаваемых по ссылке.

Примеры

В следующем примере реализация метода IsInputReady указывает на ожидание входом приема дополнительных данных при соблюдении следующих условий:

  • Для входа доступны дополнительные данные выше по уровню обработки (!inputEOR).

  • В буферах, уже полученных компонентом (inputBuffers[inputIndex].CurrentRow() == null), сейчас отсутствуют данные, доступные для обработки для входа.

Если вход ожидает приема дополнительных данных, компонент потока данных указывает на это путем задания значения true для элемента в массиве canProcess, соответствующем этому входу.

И наоборот, если у компонента все еще имеются данные, доступные для обработки, для входа, в примере обработка входа приостанавливается. В примере это выполняется путем задания значения false для элемента в массиве canProcess, соответствующем этому входу.

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 типа Boolean для указания наличия дополнительных восходящих данных, доступных для каждого входа. EOR в имени массива представляет «конец набора строк» и ссылается на свойство EndOfRowset буферов потока данных. В части примера, не приведенной здесь, метод ProcessInput проверяет значение свойства EndOfRowset для всех получаемых буферов данных. Если значение true указывает, что для входных данных больше нет вышестоящих данных, в этом примере задается значение inputEORtrue для этого входного значения. Эта реализация IsInputReady метода задает соответствующее значение в canProcess массиве false для входных данных, если значение inputEOR указывает, что для входных данных больше нет вышестоящих данных.

Комментарии

При установке значения Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure свойства true в DtsPipelineComponentAttributeпараметре необходимо также предоставить реализацию для IsInputReady метода.

Подсистема потока данных вызывает IsInputReady метод, чтобы определить, какие входные данные ожидают получения дополнительных данных. В реализации этого метода вы задаете состояние каждого входного значения компонента в логическом canProcess массиве. (Входные данные идентифицируются по их значениям идентификатора в массиве inputIDs .) При установке значения входных данных true в canProcess массив обработчик потока данных вызывает метод компонента ProcessInput и предоставляет дополнительные данные для указанных входных данных.

Хотя доступны дополнительные вышестоящие данные, значение по крайней мере одного входного значения всегда должно находиться true в массиве или остановить обработку canProcess .

Дополнительные сведения об обработке чрезмерного использования памяти, если входные данные пользовательского компонента потока данных создают данные с неравномерной скоростью, см. в разделе "Разработка компонентов Поток данных с несколькими входными данными".

Применяется к