private void smsSendngMonitor() { while (true) { while (smsSendingQueue.Count > 0) { MessageToSend messageToSend = smsSendingQueue[0]; if (Util.SendSMS(messageToSend.getClientNum(), messageToSend.getMsgContent())) { smsSendingQueue.RemoveAt(0); if (enableLogging) { logWriter.WriteLine(DateTime.Now + "," + messageToSend.getClientNum() + "," + messageToSend.getMsgContent() + ", successfully sent."); logWriter.Flush(); } } else { if (messageToSend.failedCount >= smsResendRetryTimes) { smsSendingQueue.RemoveAt(0); if (enableLogging) { logWriter.WriteLine(DateTime.Now + "," + messageToSend.getClientNum() + "," + messageToSend.getMsgContent() + ", failed to send too many times. Giving up retrying."); logWriter.Flush(); } } else { if (enableLogging) { logWriter.WriteLine(DateTime.Now + "," + messageToSend.getClientNum() + "," + messageToSend.getMsgContent() + ", message failed to send, retrying in " + sendSMSPollingFreq * (messageToSend.failedCount + 1) + " seconds."); logWriter.Flush(); } messageToSend.failedCount++; Thread.Sleep(sendSMSPollingFreq * messageToSend.failedCount * 1000); } } } Thread.Sleep(sendSMSPollingFreq * 1000); } }