ロック/スリープを使用して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秒ごとに呼び出しがありますが、時には 2つのスレッドが同時にそこに入り、2つの要求が1秒未満の間隔で実行されます。
EDIT:
要求(簡易)を発射するコード
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"ですか?ロック変数の宣言から "readonly"を削除してみてください。 – Graffito
スレッドの@Graffitoインスタンスには 'Sleep'メソッドがありません。 – Cologler