clojureclojureclr

Why clojure-clr can use Console/WriteLine but can't use Task/Delay


I want to try clojure-clr

This program works fine:

(import [System])
(defn -main [& args]
 (Console/WriteLine "Hello, World!"))

but when I want to use Task class:

(import [System.Threading.Tasks])
(import [System])

(defn -main [& args]
 (Task/Delay 1))

I got error:System.InvalidOperationException: Unable to find static field: Delay

but in this case,Task/Delay is same to Console/WriteLine

I don't know why


Solution

  • The first one works because System is loaded by default.

    Try import static:

    user=> (import (System.Threading.Tasks Task))
    user=> (Task/Delay 1)
    #object[DelayPromise 0x1554b35 "System.Threading.Tasks.Task+DelayPromise"]
    

    Or use fully qualified name

    user=> (System.Threading.Tasks.Task/Delay (TimeSpan/FromSeconds 10))
    #object[DelayPromise 0x223ef57 "System.Threading.Tasks.Task+DelayPromise"]