我處於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