у меня есть проблема с несколькими вызовами к веб-сервису API - PullRequest
0 голосов
/ 16 января 2019

У меня проблема с несколькими вызовами к веб-сервису API, я пытаюсь объяснить, как это работает: - У меня есть экземпляр прокси, который делает звонки на веб-API - Многие потоки обращаются к одному и тому же экземпляру TProxy и вызывают выполнение его метода с разными входными параметрами.

Проблема в том, что иногда вызывающий абонент получает ответ, принадлежащий другим потокам.

Я написал очень упрощенный код, любые предложения по углублению темы

public class Tproxy
{
private object _lock=new object()


public string execute(string input_parameter)
{
    lock(_lock)
    {
        return StaticMethod(input_parameter)
    }
}


public static  string StaticMethod(string input_parameter)
{
    string res="";
    string url="some address.....";

                try
                {
                    using (var wb = new System.Net.WebClient())
                    {
                        var response = wb.UploadValues(url, "POST", data);
                        res=Encoding.UTF8.GetString(response);

                        response=null;
                        ris=true;
                    }
                }
                catch ( System.Exception ee )  { ....... }

    return res;
}
}

Проблема была гораздо более очевидной без «оператора lock ()», но иногда она возникает и при ее возникновении.

Я решил проблему с помощью некоторых проверок, но я хочу не понимать, в чем реальная проблема.

Каждый вызов вызывает метод, и его следует ждать до тех пор, пока не будет получен ответ, в конце концов проблемы с синхронизацией должны возникнуть позже, но я не понимаю, почему они «смешивают» друг друга со своим результатом

Блокировка statemente в этом контексте действительно необходима? (однако любой поток создаст собственный вызов System.Net.WebClient)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...