Groovy/grails:将参数传递给线程

elC*_*ano 3 grails groovy multithreading

在grails控制器中,启动一个新线程(任务/承诺).但是当我尝试在线程中获取它时,用户为null.

if(springSecurityService.currentUser){
                task {
                    // do something with the current user
                    // springSecurityService.currentUser is null here!!!!!!
                }.get()
            }
Run Code Online (Sandbox Code Playgroud)

如何将用户作为参数传递给任务?

Ian*_*rts 6

问题不在于"线程是在用户离开控制器之后启动的",而是springSecurityService.currentUser线程本地状态,当从不同线程调用时,它会为您提供不同的值.但是,如果你保存该线程的价值springSecurityService.currentUser一个局部变量,你应该能够访问瓶盖内:

if(springSecurityService.currentUser){
   def theUser = springSecurityService.currentUser
   task {
       // do something with theUser
   }.get()
}
Run Code Online (Sandbox Code Playgroud)