ConcurrentBag
является потокобезопасным, но ваш код не является:
if (!SystemNames.Contains(name))
{
SystemNames.Add(name);
}
Contains
будет выполняться потокобезопасным образом, затем Add
также будет выполняться потокобезопасным , но у вас нет гарантии, что товар не был добавлен между ними.
Для ваших нужд я рекомендую использовать ConcurrentDictionary
. Просто игнорируйте значение, так как оно вам не понадобится.
var SystemNames = new ConcurrentDictionary<string, bool>();
Затем используйте метод TryAdd
, чтобы выполнить «если не содержит, то добавить» в одной атомарной операции:
SystemNames.TryAdd(name, true);
Автономный исполняемый файл?
Кстати, вы задаете вопрос, я не уверен, знаете ли вы, но Windows Script Host, входящий в состав Windows, позволяет запускать файлы .js из командной строки. Ваш javascript не будет исполняемым файлом, он останется скриптом, текстовым файлом. Сценарий выполняется в cscript.exe, предоставляемом WSH. Компиляция не требуется. Может быть, вы все это знали.
Я использую Javascript таким образом для различных утилит в Windows.
Я думаю, что ваше чутье верно в отношении доступности библиотек. Вы вроде сами , чтобы найти все эти вещи. Хотя, как только вы их найдете, несложно упаковать библиотеки Javascript как компоненты COM и разрешить повторное использование откуда угодно. См. Здесь пример упаковки библиотеки Google Diff / Patch / Match Javascript в COM.
Приложение : Как только часть кода становится доступной в COM, он может быть использован любым Javascript, запущенным на машине. Некоторые примеры COM-объектов, доступных для сценариев Javascript, работающих в WSH:
Вы можете использовать Rhino для компиляции Javascript в байт-код Java и получить доступ ко всем библиотекам Java.
Или вы можете использовать JScript.net и получить доступ к библиотекам .net. .net включает jsc.exe, который создает exe-файлы.
Для работы обоих из них требуется установка соответствующей инфраструктуры.
Rhino связан с JDK 1.6, jrunscript.exe в каталоге bin позволит вам запускать любой Javascript, который вы хотите. Поскольку он работает под Java, вы получаете доступ ко всем имеющимся у вас библиотекам Java.
Мы широко используем его из командной строки. Это очень хорошо.
Один из способов - написать эти утилиты как приложения AIR. Они могут быть написаны на JavaScript и не должны иметь пользовательского интерфейса. У них есть доступ к командной строке, и существуют существующие библиотеки ActionScript 3, которые могут обрабатывать FTP и т. Д. Эти API-интерфейсы ActionScript можно вызывать из JS в приложениях AIR. Приложения AIR также имеют доступ к базе данных sqlite.