我处于IIS上有一个ASP.NET Web API 2项目的情况,我在期待并发问题。我需要生成随机数并确保它们是唯一的(稍后存储在数据库中)。为此,我实现了一个简单的内存RNG,它依赖于静态ConcurrentBag。我意识到,这种实现将意味着分布式架构上的风险。很快,代码如下所示:ConcurrentBag <T>是否合适?
public interface IRandomNumberGenerator
{
string ReserveNumber();
string ReleaseNumber(string number);
}
public class InMemoryRandomNumberGenerator : IRandomNumberGenerator
{
private static readonly ConcurrentBag<string> Bag = new ConcurrentBag<string>();
public string ReserveNumber()
{
// Add
throw new NotImplementedException();
}
public string ReleaseNumber(string number)
{
// Remove
throw new NotImplementedException();
}
}
这段代码的目的是,像这样使用:
var number = rng.ReserveNumber();
StoreIntoDatabase(number);
rng.ReleaseNumber(number);
我是否适当地使用ConcurrentBag
收藏?
另请注意,我简化了示例,并且我不感兴趣将代码移入SQL并使用SQL事务来完成此任务。
您可能需要打开'InMemoryRandomNumberGenerator'成'静态class'。否则,你并没有真正描述你想用'ConcurrentBag'来做什么。我建议你尝试一下,如你所提供的信息的形式,我可以看到没有理由为什么它不合适。 –
@KrisVandermotten感谢您的反馈Kris。将立即应用更改。 – maxbeaudoin
当你试图编译时你肯定会意识到:一个静态类不能实现一个接口...... – oleksii