Clojure에서 비동기 프로그래밍을 할 때, 종종 애전 신호를 처리하는 방법을 알아야 합니다. 애전 신호는 작업이 시간이 오래 걸릴 때 발생하는 문제를 해결하기 위해 사용됩니다. Clojure에서는 future
나 promise
를 사용하여 비동기 작업을 수행하고 애전 신호를 처리할 수 있습니다.
future
를 사용한 애전 신호 처리
future
를 사용하여 애전 신호를 처리하는 예제를 살펴보겠습니다. 아래는 future
를 사용하여 비동기 작업을 수행하고 애전 신호를 처리하는 Clojure 코드입니다.
(defn long-running-task []
(Thread/sleep 5000)
:result)
(defn handle-timeout [f]
(if (future-done? f)
@f
:timeout))
(defn run-task []
(let [task (future (long-running-task))]
(handle-timeout task)))
위 코드에서 long-running-task
함수는 5초가 걸리는 가상의 장시간 소요되는 작업을 수행합니다. run-task
함수는 future
를 사용하여 long-running-task
를 비동기적으로 수행하고, handle-timeout
함수를 사용하여 애전 신호를 처리합니다.
promise
를 사용한 애전 신호 처리
또 다른 방법으로 promise
를 사용하여 애전 신호를 처리하는 방법을 살펴보겠습니다. 아래는 promise
를 사용하여 애전 신호를 처리하는 Clojure 코드입니다.
(def p (promise))
(defn long-running-task []
(Thread/sleep 5000)
(deliver p :result))
(defn handle-timeout [p]
(let [result (realized? p)]
(if result
@p
:timeout)))
(defn run-task []
(long-running-task)
(handle-timeout p))
위 코드에서 promise
를 사용하여 애전 신호를 처리하는 예제를 살펴보았습니다. long-running-task
함수는 deliver
를 사용하여 promise
에 결과를 전달하고, handle-timeout
함수를 사용하여 애전 신호를 처리합니다.
Clojure에서는 future
나 promise
를 사용하여 비동기 작업을 수행하고 애전 신호를 처리할 수 있습니다. 이러한 방법을 사용하여 효과적으로 비동기 작업을 관리하고 애전 신호를 처리할 수 있습니다.