我在多次调用Web api服务时遇到问题

时间:2019-01-16 15:03:09

标签: c# asp.net-web-api

我多次调用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调用)

0 个答案:

没有答案
相关问题