Добавление задержки для нескольких текстовых сообщений 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 секунд не поможет.

Другие вопросы по тегам