首页 / C# / c# – 忙线等待线程
c# – 忙线等待线程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 忙线等待线程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1752字,纯文字阅读大概需要3分钟。
内容图文
基本上,我需要忙等到网页上出现一些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个canidates,它会产生8个线程,每个线程都在寻找声明全部出现在网页上.发现是一个全局变量.一旦其中一个线程发现全部声明,他们都应该保释.
关于这种方法,我有几个问题.首先,这是一个很好的方法.其次,每个线程都会获得忙等待功能的“副本”.我的意思是,一个线程可以抢占另一个线程并更改该函数中的数据,或者它们每个都获得函数内声明的变量的副本.请注意,这两个函数都在同一个对象中.
解决方法:
在我回答你的问题之前,我必须指出你已经犯下了closing over the loop variable的恶劣行为.
First off, its it a good approach.
不,不是真的.任意创建线程通常不是一个好主意.最好使用线程池技术.这可以使用ThreadPool.QueueUserWorkItem或Task类完成.
Second, will each thread get its own “copy” of the busy wait function.
By that I mean, can one thread preempt another and change the data in
that function, or do they each get a copy of the variables declared
inside the function.
BusyWait的每个运行实例都将获得自己的所有局部变量的副本(即页面和请求).由于在非本地范围内声明(大概是无论如何),因此它将在所有正在运行的BusyWait实例之间共享.因此,您当前对find的读取和写入不是线程安全的,因为没有适当的同步机制.
内容总结
以上是互联网集市为您收集整理的c# – 忙线等待线程全部内容,希望文章能够帮你解决c# – 忙线等待线程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。