Добрый день!
В цикле формирую Thread'ы каждый из них кладу в Map, для дальнейшего слежения за статусами ( это необходимо для запуска дальнейшего кода ). В цикле перебираю статусы.
1) статус Running появляется не сразу (спустя минут 10), почему?
Если убрать код смотрящий на статусы - результат появляется раньше, но не вижу, когда началось выполнение и не вижу критерия для запуска дальнейшего кода.
2) даже после отрабатывания процедуры (через второе клиентское приложение смотрю) в отладчике статус Running, но не Terminated (создал енум
https://msdn.microsoft.com/en-us/lib...94(VS.85).aspx ), почему?
(Trace Parser не запускал)
Цикл:
X++:
for( ... )
{
ThreadsMap.insert( CurStep, farm_BudgetPlanFactHybrid::createThread( ... ) );
CurStep++;
}
Метод:
X++:
Static server Thread createThread( str _query )
{
ExecutePermission ExecutePermission = new ExecutePermission();
Thread thread;
ExecutePermission.assert();
thread = new Thread();
thread.setInputParm([ _query ]);
thread.removeOnComplete(true);
thread.run(classnum(farm_BudgetPlanFactHybrid), staticmethodstr(farm_BudgetPlanFactHybrid, executeUpdateWithThread));
CodeAccessPermission::RevertAssert();
return thread;
}
Немножко бубна:
X++:
MapEnumerator = ThreadsMap.getEnumerator();
While( MapEnumerator.moveNext() && ThreadsMap.elements() )
{
ParmThread = MapEnumerator.currentValue();
test = ParmThread.status();
if( ParmThread.status() == farm_ThreadStatus::Terminated )
{
ThreadsMap.remove( MapEnumerator.currentKey() );
}
if( MapEnumerator.currentKey() == ThreadsMap.elements() - 1 )
{
MapEnumerator = ThreadsMap.getEnumerator();
}
}