Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
62 / 29 / 5
Регистрация: 20.11.2009
Сообщений: 193
1
.NET 4.x

Многопоточные асинхронные запросы с ограничением по времени

11.03.2016, 12:30. Показов 700. Ответов 0

Author24 — интернет-сервис помощи студентам
Понемногу осваиваю многопоточность и асинхронность. Пытаюсь решить следующую задачу:

Есть метод AsyncPost(string data, string url):

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
  public static Task AsyncPost(string postData, string uri)
        {
 
            return Task.Run(() =>
            {
 
            request:
 
                var request = (HttpWebRequest)WebRequest.Create(uri);
 
                request.Method = "POST";
 
                Stream dataStream;
 
                byte[] byteArray = Encoding.UTF8.GetBytes(postData ?? "");
 
 
                request.ContentType = "text/xml;charset=UTF-8";
 
                request.ContentLength = byteArray.Length;
 
                dataStream = request.GetRequestStream();
 
                dataStream.Write(byteArray, 0, byteArray.Length);
 
                dataStream.Close();
 
                try
                {
 
                    WebResponse response = request.GetResponse();
 
                    // Console.WriteLine(((HttpWebResponse)response).StatusDescription);
 
                    dataStream = response.GetResponseStream();
 
                    StreamReader reader = new StreamReader(dataStream);
 
                    string responseFromServer = reader.ReadToEnd();
 
                    //testxml.response = responseFromServer;
 
                    reader.Close();
 
                    dataStream.Close();
 
                    response.Close();
 
                    return true;
                }
                catch (WebException ex)
                {
                    if (ex.Response != null)
                    {
 
                        Stream data = ex.Response.GetResponseStream();
 
                        string text = new StreamReader(data).ReadToEnd();
 
                        logger.Error(postData);
 
                        data.Close();
 
                    }
                    else
                    {
 
                        logger.Error(ex.Message);  //переподключение в случае таймаута
 
                        Thread.Sleep(60000);
 
                        goto request;
 
                    }
 
                }
            });
 
            //end of Task
        }
которым предполагается стучаться к API одновременно (в 8 одновременных запросов), но не более 14 в секунду.

Как ограничить число потоков я понял - использовать ThreadPool. Но не понял как ограничить количество запросов в секунду.

Еще нужен ваш совет - стоит ли закрывать соединение?
Возможны ли подводные камни такого подхода, вроде OutOfMemoryException?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2016, 12:30
Ответы с готовыми решениями:

Как проще проектировать многопоточные или асинхронные приложения?
Доброе утро! Подскажите, пожалуйста, какая есть документация на эту тему?

Многопоточные запросы POST\GET
Здравствуйте. В MDI-приложении на Qt требуется организовать многопоточную работу с сетью....

Многопоточные запросы на сайт прерываются из-за 500 ошибки Synapse
Использую Delphi 2010, Synapse, uLkJSON Программа работает с ~300 потоков и с помощью HTTP/HTTPS...

Асинхронные запросы
Здравствуйте. Пытаюсь реализовать асинхронный вызов метода. При использовании Task все проходит...

0
11.03.2016, 12:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2016, 12:30
Помогаю со студенческими работами здесь

Асинхронные запросы
Здравия! имеется index.php страница такого вида <form id="form1" name="form1" method="get"...

Асинхронные Http запросы
Привет. Стоит задача: сделать асинхронный нагрузочный тест для сервера. Что есть сейчас. 1) Набор...

Асинхронные запросы в php
здравствуйте. Я пытаюсь понять, как пишется код для асинхронного запроса на sql. Пожалуйста, можете...

Асинхронные запросы к обработчику на сервере
Доброго времени суток! Я занимаюсь web-разработкой недавно и не знаю как решить одну проблему, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru