using System.Threading.Tasks;
var account = new Account(0);
for (int i = 0; i < tasks.Length; i++)
tasks[i] = Task.Run(() => Update(account));
await Task.WhenAll(tasks);
Console.WriteLine($"Account's balance is {account.GetBalance()}");
void Update(Account account)
decimal[] amounts = { 0, 2, -1, 6 };
foreach (var amount in amounts)
account.Debit(Math.Abs(amount));
public Account(decimal initialBalance) => balance = initialBalance;
public decimal Debit(decimal amount)
throw new ArgumentOutOfRangeException(nameof(amount), "The debit amount cannot be negative.");
decimal appliedAmount = 0;
public void Credit(decimal amount)
throw new ArgumentOutOfRangeException(nameof(amount), "The credit amount cannot be negative.");
public decimal GetBalance()
public override string? ToString()
return $"Balance: {GetBalance()}";