Isn't the select processing order random? IIRC the only guarantee is 
"default" case is handled as a low priority.

So, something like this maybe?

select {
case errCh <- err:
default:
select {
case <-ctx.Done():
}
}

Again, take this with a grain of salt. I didn't check the spec or code, 
just off the top of my head.


Best,

On Thursday, April 6, 2017 at 11:29:58 AM UTC+3, Pierre Durand wrote:
>
> I did it for a good reason:
> If the context is canceled `srv.Shutdown` is called.
> Then, `<-errCh` is not called anymore.
> This code ensures that there is not leaking goroutine.
>
> Le mercredi 5 avril 2017 07:13:19 UTC+2, Johnny Luo a écrit :
>>
>> func listenAndServe(ctx context.Context, srv *http.Server, errCh chan<- 
>> error) {
>>  err := srv.ListenAndServe()
>>  select {
>>  case errCh <- err:
>>  case <-ctx.Done():
>>  }
>> }
>> ListenAndServe is blocking function, so the select will not happen until 
>> ListenAndServe return.  and errCh become no use
>>
>>
>> On Wednesday, April 5, 2017 at 4:02:16 AM UTC+10, Pierre Durand wrote:
>>>
>>> Hello
>>>
>>> I wrote a small helper to stop an HTTP Server when a Context is canceled.
>>> https://play.golang.org/p/Gl8APynVdh
>>>
>>> What do you think ?
>>> Is it OK to use context cancellation for stopping long running functions 
>>> ?
>>>
>>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to