winform多线程抓取数据如何更新数据库?
情况是怎样的,我用多线程Task去抓取数据,抓到数据后该如何存数据库?数据库是sqlite。
1、开始我想直接在task里存数据库,但是在多线程的情况下,就会出现多个线程同时操作一个数据库文件,不知道会不会冲突,数据库能承受的最大连接数是多少?
2、后来我想单独开个线程只存数据库,所有Task里的数据都交给这个数据库线程。可是我不知道怎么实现。
下面是伪代码
//主线程
private void button1_Click(object sender, EventArgs e){
for(int i = 0; i < 10000; i++){
var task = new Task(dataTask,i);
task.Start();
}
}
// task方法
private void dataTask(object obj){
int i = (int)obj;
List<string> list = new List<string>(); //抓取到的数据信息
//模拟抓取数据
Thread.Sleep(1000);
list.Add("A"+i);
list.Add("B"+i);
list.Add("C"+i);
//委托更新ui,这里没有写代码
this.BeginInvoke(updateUI, i);
//如何把list存数据库?
//需要用到线程池吗?
//如何处理多线程的情况?
//???
}
谢谢各位能给点意见?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你可以把抓到的数据存储到一个结构
struct
然后将这个
struct
存到一个全局的并发队列queue
中关于这个队列的使用详见 ConcurrentQueue
最后开一个线程单独监视这个队列
queue
当发现其中有数据的时候往 sqlite 中写入数据