, так как ES06 вы можете получить значения объекта как массива с
let arrValues = Object.values( yourObject) ;
, он возвращает массив значений объекта и не извлекает значения из Prototype !!
и для ключей (allready answerd передо мной здесь)
let arrKeys = Object.keys(yourObject);
Испытайте BackgroundWorker. Это поддерживает обновления прогресса и отмену выполняющейся задачи.
Если Вы хотите, чтобы один поток ожидал, пока другой поток не закончил делать свою вещь, то Монитор. Ожидайте и Монитор. Импульс хорош, как ManualResetEvent. Однако они действительно не имеют применения для отмены выполняющейся задачи.
Если Вы хотите написать свой собственный код отмены, у Вас могло бы просто быть поле где-нибудь, к которому оба потока имеют доступ. Mark его энергозависимый, например:
private volatile bool cancelling;
Имейте основной поток, устанавливает его на истинный, и имеют рабочий поток, проверяют его периодически и устанавливают его на ложь, когда это закончилось.
Это не действительно сопоставимо с наличием 'глобальной переменной', поскольку можно все еще ограничить объем семафорной переменной, чтобы быть частными к классу.
Изучите Монитор. Ожидайте и Монитор. Импульс. Вот превосходная статья о Поточной обработке в (очень читаемом) .NET: http://www.albahari.com/threading/part4.aspx
Немного неопределенный (за исключением времени), но изучают ManualResetEvent и AutoResetEvent. Вы также могли бы хотеть искать ключевое слово блокировки и Монитор.
Простое решение, как синхронизируемая статическая булевская переменная, должно быть всем, в чем Вы нуждаетесь в противоположность основанному на платформе решению который copuld быть излишеством для Вашего сценария. В случае, если Вы все еще хотите платформу, взглянули на параллельные расширения.NET для идей.
Это зависит от того, в какой синхронизации Вы нуждаетесь. Если Вы хотите смочь выполнить поток в цикле, пока некоторый конец выполнения не достигнут - все, в чем Вы нуждаетесь, статическая bool переменная. Если Вы хотите, чтобы один поток ожидал, пока другой поток не достигает точки в выполнении, Вы могли бы хотеть использовать WaitEvents (AutoResetEvent или ManualResetEvent). Iflyyou должен ожидать нескольких waitHandles, можно использовать WaitHandle. WaitAll или WaitHandle. WaitAny.
Посмотрите на Систему. Время выполнения. Пространство имен дистанционной работы.