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

113 Views Asked by At

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

1

There are 1 best solutions below

0
pph On BEST ANSWER

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"]