前景提要:
我要操作一个文件型数据库,开了50个线程。
一边从internet获取数据一边insert
但是运行的时候会报数据库被锁,我不知道怎么处理这个问题。
所以想等数据全部取完了存在list里一起insert。
但是又不知道怎么判断子线程已完成任务。
我要操作一个文件型数据库,开了50个线程。
一边从internet获取数据一边insert
但是运行的时候会报数据库被锁,我不知道怎么处理这个问题。
所以想等数据全部取完了存在list里一起insert。
但是又不知道怎么判断子线程已完成任务。
或是自定义事件
或是使用Thread的Join方法。
每个线程结束后执行某个方法,方法中累计,如果和开始的线程数一样,就触发一个事件。
2 等候子线程结束的线程 WaitHandle.WaitAll(AutoEventSet[]),即INSERT线程
3 每个子线程结束设置其对应的AutoResetEvent为终止状态。AutoResetEvent.Set()解释,当AutoEventSet数组全部为终止状态之前, WaitHandle.WaitAll()始终阻塞,直到全部信号量都为终止状态
哦。
我开线程的主要目的是从internet获取数据。
但是又处理不好,获取数据和insert to数据库的关系
因为如果完全获取完了再insert的话
又太占内存了。
由线程各自更新数据库会抛出异常
提示 database is locked (sqlite)
我不知道怎么等待解锁了再insert
谢谢你的回复。
我想了一下,可以设置一个类变量。然后各个线程来++这个变量,然后触发事件。
但这样的话,主线程岂不是要在一个while(true)里等待事件?