mirror of
https://github.com/Bubuni-Team/telegram-bot.git
synced 2026-07-31 00:29:24 +03:00
[core] add thread safe random to DI
This commit is contained in:
@@ -45,6 +45,8 @@ namespace Kruzya.TelegramBot.Core
|
|||||||
services.AddSingleton<UserService>();
|
services.AddSingleton<UserService>();
|
||||||
services.AddSingleton<IAntiFlood, MemoryAntiFloodService>();
|
services.AddSingleton<IAntiFlood, MemoryAntiFloodService>();
|
||||||
|
|
||||||
|
services.AddSingleton<ThreadSafeRandom>();
|
||||||
|
|
||||||
// Trigger module handlers.
|
// Trigger module handlers.
|
||||||
_core.Modules.ConfigureServices(services);
|
_core.Modules.ConfigureServices(services);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Kruzya.TelegramBot.Core;
|
||||||
|
|
||||||
|
public class ThreadSafeRandom
|
||||||
|
{
|
||||||
|
private static readonly Random Global = new();
|
||||||
|
[ThreadStatic] private static Random _local;
|
||||||
|
|
||||||
|
public int Next()
|
||||||
|
{
|
||||||
|
CheckLocal();
|
||||||
|
|
||||||
|
return _local.Next();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Next(int minValue, int maxValue)
|
||||||
|
{
|
||||||
|
CheckLocal();
|
||||||
|
|
||||||
|
return _local.Next(minValue, maxValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Next(int maxValue)
|
||||||
|
{
|
||||||
|
CheckLocal();
|
||||||
|
|
||||||
|
return _local.Next(maxValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void CheckLocal()
|
||||||
|
{
|
||||||
|
if (_local == null)
|
||||||
|
{
|
||||||
|
int seed;
|
||||||
|
lock (Global)
|
||||||
|
{
|
||||||
|
seed = Global.Next();
|
||||||
|
}
|
||||||
|
_local = new Random(seed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user