Я не уверен, как эта функция переводит поток в спящий режим - PullRequest
0 голосов
/ 04 июля 2019

Я читаю книгу о Clojure, и в примере они хотят поместить данные в канал.Тем не менее, автор упоминает, что core.async блокируется для случайного ожидания, и указывает, что функция random-add отвечает за переход в спящий режим случайное число раз.Я пытался просмотреть Clojure Docs и не могу найти информацию об асинхронности / переходе в режим сна.И больше всего меня смутило то, что автор сказал об этой функции random-add.

"Это случайное количество времени будет функцией с именем random-add. Она использует функцию rand-int, которая выбираетслучайное целое число от 0 до 100 000. Затем оно использует его в функции, которая будет суммировать вектор, заполненный числом 1 случайной длины "

, что для меня не имеет смысла, потому что (repeat 1 (rand-int 100000))сначала вернет список из 1 случайного числа в указанном диапазоне, а затем список будет соединен с вектором, а затем Reduce + фактически вернет список из 1 элемента.

(ns async-tea-party.core
   (:require [clojure.core.async :as async]))

(def google-tea-service-chan (async/chan 10))
(def yahoo-tea-service-chan (async/chan 10))

(defn random-add []
  (reduce + (conj [] (repeat 1 (rand-int 100000)))))

(defn request-google-tea-service []
  (async/go
  (random-add)
  (async/>! google-tea-service-chan
  "tea compliments of google")))

(defn request-yahoo-tea-service []
  (async/go
  (random-add)
  (async/>! yahoo-tea-service-chan
  "tea compliments of yahoo")))

(defn request-tea []
  (request-google-tea-service)
  (request-yahoo-tea-service)
  (async/go (let [[v] (async/alts!
    [google-tea-service-chan
    yahoo-tea-service-chan])]
    (println v))))```

No errors, just don't quite understand how this code makes any sense, especially with "async/go (random-add)" because (random-add) returns a list?
...