Function Test([string]$arg1, [string]$arg2)
{
Write-Host "`$arg1 value: $arg1"
Write-Host "`$arg2 value: $arg2"
}
Test("ABC") ("DEF")
Выполнение статического конструктора запускается первым из следующих событий, происходящих в домене приложения:
Ответственность за обработку проблем параллелизма при вызове статических конструкторов должна лежать на загрузчике класса.
Я не думаю, что есть много споров. Инициализаторы запускаются при загрузке класса. Если класс уже загружен, то никаких проверок не требуется.
В спецификации сказано, что «выполняется во время, зависящее от реализации, до первого использования статического поля этого класса».
Таким образом, можно предположить (или надеяться, если вы re пессимистично), что реализация поняла, что им нужно заботиться о синхронизации потоков.
Я считаю, что это работает как часть JIT-компиляции. После того, как статический инициализатор был запущен и запущен, ему больше не нужно запускать его и, следовательно, нет проблем синхронизации с несколькими потоками. И, конечно же, JIT-движок будет потокобезопасным.
Ник.