func NewPreciseStrategyWithMetricRegistry(limit int, registry core.MetricRegistry, tags ...string) *PreciseStrategy {
	if limit < 1 {
		limit = 1
	}
	listener := registry.RegisterDistribution(core.MetricInFlight, tags...)
	strategy := &PreciseStrategy{
		limit:          int32(limit),
		metricListener: listener,
	}
	registry.RegisterGauge(core.MetricLimit, core.NewIntMetricSupplierWrapper(strategy.GetLimit), tags...)
	return strategy
}
NewPreciseStrategyWithMetricRegistry will create a new PreciseStrategy
package strategy
import (
	"context"
	"fmt"
	"sync"
	"github.com/platinummonkey/go-concurrency-limits/core"
)
type PreciseStrategy struct {
	mu             sync.Mutex
	inFlight       int32
	limit          int32
	metricListener core.MetricSampleListener
}
func NewPreciseStrategy(limit int) *PreciseStrategy {
	return NewPreciseStrategyWithMetricRegistry(limit, core.EmptyMetricRegistryInstance)
}