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
указывает, что для входных данных больше нет вышестоящих данных, в этом примере задается значение inputEOR
true
для этого входного значения. Эта реализация IsInputReady метода задает соответствующее значение в canProcess
массиве false
для входных данных, если значение inputEOR
указывает, что для входных данных больше нет вышестоящих данных.
Комментарии
При установке значения Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure свойства true
в DtsPipelineComponentAttributeпараметре необходимо также предоставить реализацию для IsInputReady метода.
Подсистема потока данных вызывает IsInputReady метод, чтобы определить, какие входные данные ожидают получения дополнительных данных. В реализации этого метода вы задаете состояние каждого входного значения компонента в логическом canProcess
массиве. (Входные данные идентифицируются по их значениям идентификатора в массиве inputIDs
.) При установке значения входных данных true
в canProcess
массив обработчик потока данных вызывает метод компонента ProcessInput и предоставляет дополнительные данные для указанных входных данных.
Хотя доступны дополнительные вышестоящие данные, значение по крайней мере одного входного значения всегда должно находиться true
в массиве или остановить обработку canProcess
.
Дополнительные сведения об обработке чрезмерного использования памяти, если входные данные пользовательского компонента потока данных создают данные с неравномерной скоростью, см. в разделе "Разработка компонентов Поток данных с несколькими входными данными".