Reallly thanks for your help and guide!

El martes, 25 de febrero de 2020, 5:45:17 (UTC-3), Michel Levieux escribió:
>
> Edit: I said "communicate with its caller" but in practice it might as 
> well be another goroutine or the caller of the caller, either way the 
> construct and the logic standing behind it are exactly the same :)
>
> Le mar. 25 févr. 2020 à 09:42, Michel Levieux <m.le...@capitaldata.fr 
> <javascript:>> a écrit :
>
>> Hi Juan,
>>
>> You cannot terminate a function execution from its caller if you did not 
>> pass it an argument (most likely a channel) which it can use to communicate 
>> with its caller, and terminate itself when the timeout is reached.
>> The simplest example I can think of is the following: 
>> https://play.golang.org/p/KVQ7uhiWr7H, though I'm not quite sure this is 
>> your question, since it looks like you've already experimented with this 
>> construct.
>>
>> You can trick with signals and other constructs but channels are designed 
>> for that kind of need, so I suppose this is the best way to go. If you want 
>> something that wraps this behaviour because you need the timeout to follow 
>> the logic of your program, maybe package https://golang.org/pkg/context/ 
>> can help you.
>>
>> Hope this was useful!
>>
>> Le mar. 25 févr. 2020 à 00:45, Juan Mamani <juanmama...@gmail.com 
>> <javascript:>> a écrit :
>>
>>> Sorry again.   Well, I followed your advice. Here is the link 
>>> https://play.golang.org/p/7DigEVsKbdx
>>> How can I cancel goToSleep() when timeout is reached?
>>>
>>>
>>> El lunes, 24 de febrero de 2020, 14:16:32 (UTC-3), Jake Montgomery 
>>> escribió:
>>>>
>>>> Your code will still not compile. In this group, it is often helpful to 
>>>> include a link to your code in the playground (https://play.golang.org/) 
>>>> using the "Share" button. That is in addition to, or instead of, posting 
>>>> your code in the message. This will allow others to easily run your code, 
>>>> but also will allow you to make sure it compiles. 
>>>>
>>>> On Monday, February 24, 2020 at 10:01:01 AM UTC-5, Juan Mamani wrote:
>>>>>
>>>>> Sorry}, here is the right code:  ( just was the effect to b working 
>>>>> til At 5:20am  sleepy and lost)
>>>>>
>>>>> Expected behaviour is  to end  anonyimous func when  3s timeout is 
>>>>> reached.
>>>>>
>>>>> //------------------------------------------------
>>>>> package main
>>>>>
>>>>> import(
>>>>> //"fmt"
>>>>> "time"
>>>>> "math/rand"
>>>>> "log"
>>>>> )
>>>>>
>>>>> func main(){
>>>>>
>>>>>  for{
>>>>>    log.Println("-----------------Start")
>>>>>    Task()
>>>>>    log.Println("-----------------End")
>>>>>
>>>>>   }
>>>>>
>>>>> }
>>>>>
>>>>>
>>>>> // Trying to adapt from Concurrency in Go by Katherine Cox-Buday
>>>>> func Task(){
>>>>>
>>>>> doWork := func(  done <-chan interface{}, strings <-chan string, ) 
>>>>> <-chan interface{} { //1
>>>>>     terminated := make(chan interface{})
>>>>>     go func() {
>>>>>         defer log.Println("doWork exited.")
>>>>>         defer close(terminated)
>>>>>         for {
>>>>>             goToSleep()
>>>>>             select {
>>>>>              //case s := <-strings:
>>>>>              // case s := ran():
>>>>>                 // Do something interesting
>>>>>                 //fmt.Println(s)
>>>>>             case <-done: //2
>>>>>                 return
>>>>>             }
>>>>>         }
>>>>>     }()
>>>>>     return terminated
>>>>> }
>>>>>
>>>>> done := make(chan interface{})
>>>>> terminated := doWork(done, nil)
>>>>>
>>>>> go func() { //3
>>>>>     // Cancel the operation after 3 second.
>>>>>     time.Sleep(3 * time.Second)
>>>>>     log.Println("Canceling doWork goroutine reach 3s...")
>>>>>     close(done)
>>>>> }()
>>>>>
>>>>> <-terminated //4
>>>>> log.Println("Done.")
>>>>> }
>>>>>
>>>>> done := make(chan interface{})
>>>>> terminated := doWork(done, nil)
>>>>>
>>>>> go func() { //3
>>>>>     // Cancel the operation after 3 second.
>>>>>     time.Sleep(3 * time.Second)
>>>>>     log.Println("Canceling doWork goroutine reach 3s...")
>>>>>     close(done)
>>>>> }()
>>>>>
>>>>> <-terminated //4
>>>>> log.Println("Done.")
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>> func goToSleep(){
>>>>>                                                                       
>>>>>                                                                           
>>>>>   
>>>>>                                                                           
>>>>>   
>>>>>                    
>>>>> rand.Seed(time.Now().UnixNano())
>>>>>     n := rand.Intn(12) // n will be between 0 and 10
>>>>>     log.Println("Sleeping ",n,"seconds..")
>>>>>     time.Sleep(time.Duration(n)*time.Second)
>>>>>     log.Println("Done sleeping!")
>>>>> }
>>>>>
>>>>> //------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>> El lunes, 24 de febrero de 2020, 6:09:09 (UTC-3), Lutz Horn escribió:
>>>>>>
>>>>>> > I've tried to adapt from from "Concurrency in Go by Katherine 
>>>>>> Cox-Buday" to 
>>>>>> > understand how to apply timeout. But I don't get it. 
>>>>>>
>>>>>> What are you trying to do? What is the expected behaviour, what 
>>>>>> happens instead? 
>>>>>>
>>>>>> BTW, this code does not compile, there are same unbalanced curly 
>>>>>> brackets. 
>>>>>>
>>>>>> Lutz 
>>>>>>
>>>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "golang-nuts" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to golan...@googlegroups.com <javascript:>.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/golang-nuts/b0828575-fddf-4024-bec0-8faf5b9858a4%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/golang-nuts/b0828575-fddf-4024-bec0-8faf5b9858a4%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/adb3cc58-c953-4063-9838-265b47fa9454%40googlegroups.com.

Reply via email to