基本上,我需要忙碌等待直到网页上出现某些HTML代码。我已经编写了以下代码让我进行忙碌等待:
public void ExecuteBusyWaitThreads()
{
foreach (Canidate canidate in allCanidates)
{
Thread newThread = new Thread(delegate()
{
BusyWait(canidate);
});
newThread.Start();
}
}
public bool BusyWait(Canidate canidate)
{
//hit that url, and wait for the claim all button to appear
string page = null;
while (found == false)
{
HttpWebRequest request = Canidate.GetHTTPRequest(canidate.URL);
//make sure we add the authentication cookes to the request
request = Canidate.AddCookiesToRequest(request, canidate.GetCookies());
page = new Canidate().GetPage(request);
if (page.ToLower().Contains("claim all"))
{
found = true;
NotifyAllThreads();
}
}
return true;
}
那么,如果我有8个候选人,它会产生8个线程,每个线程都在寻找“网页”上出现的“全部声明”。 “found”是全局变量。一旦其中一个线程找到了“全部声明”,它们都应该退出。
对此方法我有几个问题。首先,这是一个好方法吗?第二,每个线程是否都会得到其自己的“繁忙等待函数”副本?我的意思是,一个线程是否可以抢占另一个线程并更改该函数中的数据,或者它们是否会获得在函数内声明的变量的副本?请注意,这两个函数都在同一个对象内。