Я не уверен, что это «правильный путь», но он действительно работает так, как вы этого хотите.
Вы можете установить, какой визуализатор будет использоваться для интерфейса loopback, как показано ниже, отредактировать файл /etc/netplan/01-network-manager-all.yaml (или ваш * .yaml-файл):
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
lo:
renderer: networkd
match:
name: lo
addresses:
- 172.16.123.1/32
Протестировано и работает как ожидается на рабочем столе Ubuntu 18.04
Надеюсь, это поможет.
Мой вывод 1го примера отличается:
D 3 //Принадлежит переменной и захвачен кложуром
A 2 //В этот момент переменной object не существует, она захвачена только кложуром.
C 3 //Помимо текущего кложура захвачено еще новым кложуром.
B 2 //Тут первый кложур завершен, объект захвачен только текущим кложуром.
Теперь рассмотрим 2й пример. Тут уже видна гонка, каждый раз в лог выводит разный результат и порядок. В первом случае мы вызываем все из главного потока, поэтому только один кложур исполняется в один момент времени. Во 2-м случае у нас отдельная очередь и она сражается с главным потоком - main. D: может вызваться после вызова распечатать D но до выхода из печати, а может вызываться и после как в 1м примере. И это уже влияет на то что выведется в лог.
А вот уже 2й кложур гарантированно вызовется только после завершения 1го кложура - очередь то последовательная.