public static void Deque() { while (true) { lock (ProcessingList) { int MaxQueue = int.Parse(ConfigurationManager.AppSettings["MaxQueue"]); int count = MaxQueue - ProcessingList.Count; for (int i = 0; i < count; i++) { if (queue.Count == 0) { break; } int index = i > (queue.Count - 1) ? i - 1 : i; if (i > (queue.Count - 1)) { break; } SocketItem item = null; lock (queue) { try { item = queue[index]; } catch { break; } try { item.Bank = BankBase.GetBank(queue[index]); if (EmergencySkipQueueTerminationList.Where(c => c.Equals(item.ConnectionId)).Count() != 0) { break; } ProcessingList.Add(item); item.Clients.Client(item.ConnectionId).Receive(JsonResponse.success(null, "你的转账正在进行中")); } catch (Exception ex) { logger.Error($"添加连队去处理中的列队异常. Ex - {ex.Message}"); } } queue.Remove(queue[index]); if (item != null && item?.Bank != null) { Task.Run(() => item.Bank.Start()).ContinueWith(async(response) => { item.Clients.Client(item.ConnectionId).Receive(await response); item.Bank.Dispose(); ProcessingList.Remove(item); }); } } } Thread.Sleep(5000); } }
private void Termination() { var target = ProcessingList.FirstOrDefault(c => c.ConnectionId == Context.ConnectionId); if (target != null) { lock (ProcessingList) { BankBase bank = target.Bank; if (bank != null) { Task.Run(() => bank.Dispose()).ContinueWith(async(c) => { await c; ProcessingList.Remove(target); }); } } Clients.Client(Context.ConnectionId).Receive(JsonResponse.success(null, "正在处理的转账已被强制停止")); } else { if (EmergencySkipQueueTerminationList.Count(c => c.Equals(Context.ConnectionId)) == 0 && queue.Count > 0) { EmergencySkipQueueTerminationList.Add(Context.ConnectionId); lock (queue) { target = queue.FirstOrDefault(c => c.ConnectionId == Context.ConnectionId); if (target != null) { queue.Remove(target); if (target.Bank != null) { Task.Run(() => target.Bank.Dispose()); } } EmergencySkipQueueTerminationList.Remove(Context.ConnectionId); } Clients.Client(Context.ConnectionId).Receive(JsonResponse.success(null, "转账强制停止,已从列队中移除")); } } }
public MainViewModel() { CurrentView = new LoginViewModel(this); Bank = new FakeBank(); }
public static void PrintInfo(BankBase bank, double EMI, double loanamount) { Console.WriteLine($"Seu banco: {bank.getBankName()} \n"); Console.WriteLine($"Seu EMI mensal é R${EMI.ToString("N2")} para o valor montante do empréstimo de R${loanamount.ToString("N2")} que você pediu emprestado "); }