Добавление задержки для нескольких текстовых сообщений C#
Мы хотим разделить сообщения на несколько (смс) текстовых сообщений, если количество символов превышает 136.
Но мы также хотим убедиться, что второе сообщение приходит после первого и до третьего.
Пока что из нескольких тестов, которые мы провели, похоже, что это работает, но чтобы убедиться, что мы все еще хотим добавить задержку, может быть, 3 секунды или около того.
является Thread.Sleep
правильный способ сделать это, или есть другое решение, чем добавление задержки?
Это код:
// Split message to send them as individual text messages
string[] messages = splitMessage(request["message"], 132);
for (int i = 0; i < messages.Length; i++)
{
HttpWebRequest _wr = (HttpWebRequest)WebRequest.Create(url);
// Use the CredentialCache so you can attach the authentication to the request
CredentialCache mycache = new CredentialCache { { new Uri(url), "Basic", new NetworkCredential(_username, _password) } };
// use Basic Authentication
_wr.Credentials = mycache;
_wr.Method = "POST";
_wr.ContentType = "application/json";
_wr.Timeout = -1; // not sure if necessary but it's not harmful
// _data variable holds the data to be pushed to the server in the request.
// this piece of data holds the request to send a text message from the application
string _data = "{\"outboundSMSMessageRequest\":" +
"{\"address\": \"" + formatedAddress + "\",\"requestId\": \"" + request["requestId"] + "\"" +
",\"outboundSMSTextMessage\": \"" + messages[i] + "\",\"senderAddress\": \"" + request["sender"] + "\"" +
_optional + "}}";
//get a reference to the request-stream, and write the POST data (_data) to it
using (var s = new StreamWriter(_wr.GetRequestStream()))
{
s.Write(_data);
}
//get response-stream, and use a streamReader to read the content
try
{
HttpWebResponse _response = (HttpWebResponse)_wr.GetResponse();
}
catch (WebException ex)
{
using (StreamWriter file = new StreamWriter(@"D:\WEB\SMS\jsonResponse.txt", true))
{
file.WriteLine("No good");
}
// Log exception and throw as for GET example above
Trace.WriteLine("No good");
Trace.WriteLine(ex);
}
using (Stream s = _wr.GetResponse().GetResponseStream())
{
using (StreamReader sr = new StreamReader(s))
{
var jsonData = sr.ReadToEnd();
Trace.WriteLine("Server response: " + jsonData);
//decode jsonData with javascript serializer
using (StreamWriter file = new StreamWriter(@"D:\WEB\SMS\jsonResponse.txt", true))
{
file.WriteLine("Server response: " + jsonData);
}
}
}
}
1 ответ
Я бы лучше проверил документацию вашего API отправителя sms, так как там может быть написано, что они не гарантируют порядок сообщений sms - они могут иметь внутреннюю очередь, а ответ от сервера может означать, что они поставили в очередь сообщения, не то чтобы они его доставили. В этом случае добавление задержки в 3, 5 или даже 10 секунд не поможет.