У меня проблема с несколькими вызовами к веб-сервису 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)