Check out the following link for ready-made implementations that should help:
MathNet.Numerics, Random Numbers and Probability Distributions
Extensive distributions based on random number generators (MersenneTwister, etc.) directly obtained from System.Random are of particular interest, all of which provide convenient extension methods (for example, NextFullRangeInt32, NextFullRangeInt64, NextDecimal, etc.). You can, of course, simply use the default SystemRandomSource, which is simply System.Random, decorated with extension methods.
Oh, and you can create your RNG instances as thread safe if you need it.
Very comfortably!
Ben stabile
source share