mirror of
https://github.com/hanzo-ds/go.git
synced 2026-10-30 19:45:01 +00:00
Feature-complete v2.44.0 (lib/churl, lib/col, BFloat16, QBit, scanTypeDuration, Options.Logger *slog.Logger) — fixes the [email protected].0 downgrade RED caught. Package datastore, module github.com/hanzo-ds/go, depends only on hanzo-ds/native. Wire strings preserved VERBATIM (X-ClickHouse-* headers, sql.Register("clickhouse"), clickhouse:// DSN, ClientName="clickhouse-go") — consistent with native.
30 lines
711 B
Go
30 lines
711 B
Go
package datastore
|
|
|
|
import "context"
|
|
|
|
// contextWatchdog is a helper function to run a callback when the context is done.
|
|
// It has a cancellation function to prevent the callback from running.
|
|
// Useful for interrupting some logic when the context is done,
|
|
// but you want to not bother about context cancellation if your logic is already done.
|
|
// Example:
|
|
// stopCW := contextWatchdog(ctx, func() { /* do something */ })
|
|
// // do something else
|
|
// defer stopCW()
|
|
func contextWatchdog(ctx context.Context, callback func()) (cancel func()) {
|
|
exit := make(chan struct{})
|
|
|
|
go func() {
|
|
select {
|
|
case <-exit:
|
|
return
|
|
case <-ctx.Done():
|
|
callback()
|
|
return
|
|
}
|
|
}()
|
|
|
|
return func() {
|
|
close(exit)
|
|
}
|
|
}
|