Ответ 1
core.thread
предоставляет базовые примитивы низкого уровня для потоковой передачи. std.concurrency
использует core.thread
внутренне. A tid
можно получить только из std.concurrency.spawn
.
Итак, мой вопрос в первую очередь, почему существуют два совершенно разных вкуса потоковой передачи?
Вы также можете спросить, почему существуют два способа написания кода, обычный D и встроенный код сборки. Там высокий уровень и низкий уровень.
И, во-вторых, почему они оба настолько неполны, когда вместе они обеспечивают в основном все, что вам может понадобиться?
Они не являются неполными, но ваш многопоточность должен быть разработан для работы в одном или другом. Если std.concurrency
допускает произвольный доступ к Thread
и тому подобное, гарантии, которые он делает, могут быть не столь сильными.
Чтобы ответить на ваши более конкретные вопросы, требуется function
, а не delegate
, потому что delegate
принимает указатель контекста, который допускает мутацию, которая нарушит некоторые из предположений std.concurrency
. Обратите внимание, что spawn
не разрешает аргументы, которые имеют изменяемую косвенность, поэтому никакая делегированная вещь не должна шокировать.
И вместо того, чтобы присоединяться, вы должны отправить сообщение "stop" в ваш поток. Опять же, это более высокий уровень и использует конструкции более высокого уровня.