Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> На сколько безопасен код? для потоков 
:(
    Опции темы
DenWPF
Дата 20.4.2010, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



вот эту функцию используют много потоков.
на сколько безопасен код?
может как то по другому лучше делать что бы использовались свободные прокси proxy
Код

            string ppp = "";
            try
            {
                ppp = proxy[0];
                proxy.Remove(ppp);
                System.Net.ServicePointManager.Expect100Continue = false;

                byte[] byteArray = Encoding.UTF8.GetBytes(textRequest);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "POST";
                request.ProtocolVersion = HttpVersion.Version10;
                request.ReadWriteTimeout = timeout;
                request.CookieContainer = cooks;
                request.ContentLength = textRequest.Length;
                request.ContentType = "application/x-www-form-urlencoded";
                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                request.Headers.Add("Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7");
                request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 GTBDFff GTB7.0";
                request.KeepAlive = true;
                request.Proxy = new WebProxy(ppp);
                // Отправляем данные запроса
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(byteArray, 0, textRequest.Length);

                // Получаем класс ответа
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // Читаем ответ
                Stream responseStream = response.GetResponseStream();
                StreamReader readStream = new StreamReader(responseStream, enc);

                string currResponse = readStream.ReadToEnd();
                readStream.Close();
                response.Close();
                proxy.Add(ppp);
                return currResponse;

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
                return SendRequestCook(textRequest, url, cooks, metod);
            }
        }

PM MAIL   Вверх
jonie
Дата 20.4.2010, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



небехопасен. Как минимум в строке 14 (23) идет использование данных другого потока, гд еникто не дает гарантий что они не поменяются:
Код

                request.ContentLength = textRequest.Length; //а вдруг textRequest поменяется?
....
                requestStream.Write(byteArray, 0, textRequest.Length);  //а тут уже может быть другой textRequest




--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
DenWPF
Дата 20.4.2010, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Код

string textRR = textRequest;
request.ContentLength = textRR.Length;
// Отправляем данные запроса
Stream requestStream = request.GetRequestStream();
requestStream.Write(byteArray, 0, textRR.Length);


такое меня не спасет&


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



Это сообщение отредактировал(а) DenWPF - 21.4.2010, 10:44
PM MAIL   Вверх
DenWPF
Дата 21.4.2010, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



опять же про потоки и безопасность.

вот у меня есть статический List<string> он обновляется из потоков.
когда достигает определного размера я его сохраняю.

так вот нужно ли мне использовать lock в потоке когда я делаю просто .Add() ?

PM MAIL   Вверх
jonie
Дата 21.4.2010, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



DenWPF, да, нужно. И при сохранении весьма желательно это делать... есть правда в .NET 3+ синхронизированные листы - посмотрите в их сторону


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.