我多次调用Web api服务时遇到问题, 我试图解释它是如何工作的: -我有一个代理实例,可以调用Web 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()语句”,这个问题就更明显了,但有时它也会出现。
我做了一些检查就解决了这个问题,但是我想知道真正的问题是什么。
每个调用都会调用该方法,并且应该一直等到答案为止,最终同步问题应该稍后出现,但我不明白为什么它们会将结果彼此“混合”
在这种情况下,lock语句确实是必需的吗? (但是任何线程都会创建自己的System.Net.WebClient调用)