private void ProcessNextVectors(NativeActivityContext context, NeuralVectorFlow[] result)
        {
            bool reinitialize = false;
            IList<NeuralVectorFlow> finalResult = result;

            if (UseCache)
            {
                var vars = ComputationContext.GetVariables(context, this);
                var cache = vars.Get<SerializableCache>(CacheVarName).Cache;

                // Cache results:
                if (result != null)
                {
                    foreach (var vectors in result)
                    {
                        string key = vectors.Index.ToString();
                        cache[key] = vectors;
                    }
                }

                // Combine cached vectors with result:
                var vectorsFromCache = cachedVectorFlows.Get(context);
                cachedVectorFlows.Set(context, null);

                if (result != null)
                {
                    if (vectorsFromCache.Count != 0)
                    {
                        finalResult = result.Concat(vectorsFromCache).ToList();
                    }
                }
                else
                {
                    finalResult = vectorsFromCache.ToList();
                }
            }

            if (ReinitializationFrequency != null && DoReinitializeVectorProvider != null)
            {
                var freq = ReinitializationFrequency.Get(context);
                if (freq > 0)
                {
                    var vars = ComputationContext.GetVariables(context, this);
                    int iterations = vars.Get<int>(IterationsVarName);

                    if ((++iterations % freq) == 0)
                    {
                        context.ScheduleAction(DoReinitializeVectorProvider, OnReinitializeVectorProviderCompleted);
                        reinitialize = true;
                    }

                    vars.Set(IterationsVarName, iterations);
                }
            }

            var finalArray = finalResult as NeuralVectorFlow[];
            if (finalArray == null) finalArray = finalResult.ToArray();

            GetNextVectorsDone(context, finalArray, reinitialize ? ResetSchedule.AfterExecution : ResetSchedule.None);
        }