【发布时间】:2019-02-18 03:54:52
【问题描述】:
我正在编写简单的银行账户教程程序。对于每个注册的新客户,帐号将增加 1,以获得新的 ID。 我在“C# Mueller”一书中看到了例子。我只是好奇这是否是执行此操作的正确方法,它将如何处理并发注册?有没有更好的方法来处理这个问题,也许是单例或全局变量,内存缓存?在现实世界的应用程序中如何处理这样的项目?
public class BankAccount
{
private static int _nextAccountNumber = 1000;
private int _accountNumber;
private double _balance;
public void InitBankAccount()
{
_accountNumber = ++_nextAccountNumber;
_balance = 0.0;
}
public void Deposit(decimal amount)
{
_balance += amount;
}
etc...
这个网站也很有用:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/lock-statement
【问题讨论】:
-
您可以轻松测试并证明您的代码不可靠。即:
Parallel.ForEach(Enumerable.Range(1, 1000), i => { new BankAccount().InitBankAccount(); }); Assert.AreEqual(2000, BankAccount._nextAccountNumber);。之后,您可以在自增操作上使用lock statement 来获得互斥。 -
当您重新启动应用程序时,计数会重新开始。现实生活中的应用程序将生成的数字存储在数据库中
标签: c# .net-core asp.net-core-2.0