コード例 #1
0
ファイル: TransferHub.cs プロジェクト: WKahWai/SeleniumTest
 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);
     }
 }
コード例 #2
0
ファイル: TransferHub.cs プロジェクト: WKahWai/SeleniumTest
        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, "转账强制停止,已从列队中移除"));
                }
            }
        }
コード例 #3
0
 public MainViewModel()
 {
     CurrentView = new LoginViewModel(this);
     Bank        = new FakeBank();
 }
コード例 #4
0
ファイル: Program.cs プロジェクト: mrczvn/design-patterns-gof
        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 ");
        }