【发布时间】:2017-02-13 16:49:07
【问题描述】:
我编写了一个带锁/睡眠的简单代码,用于向 API 发出请求,但我不明白为什么它不起作用。
public class RequestHandler
{
private static readonly Object Lock = new Object();
public static WebResponse Request(string url)
{
lock(Lock)
{
WebRequest request = HttpWebRequest.Create(url);
WebResponse response = request.GetResponse();
Thread.Sleep(5000);
return response;
}
}
}
多个线程同时调用此方法。
我按预期每 5 秒调用一次,但有时两个线程同时进入,两个请求的执行间隔不到一秒。
编辑:
触发请求的代码(简化)
public void Process(string url)
{
// do some treatments
var response = RequestHandler.Request(url);
}
public void Main()
{
var urls = new List<string>();
// add urls to the list...
Parallel.ForEach(urls , Process);
}
【问题讨论】:
-
你能贴出你是如何使用使用线程的请求方法的代码吗?
-
“Thread”是较早初始化的变量还是“System.Threading.Thread.CurrentThread”?尝试从 Lock 变量声明中删除“只读”。
-
@Graffito 的 Thread 实例没有
Sleep方法。 -
@Cologer:即使这不是一个好的做法,您也可以在某处声明:System.Threading.Thread Thread = new System.Threading.Thread()。
-
@Graffito 并创建一个类似
Sleep(this Thread t)的扩展方法? ^_^
标签: c# multithreading locking