我正在使用异步IO来读取文件并计算文件块的哈希值(使用多个线程)并存储到JArray中。在阅读之前,我创建了具有块数的JArray,并且线程将继续使用hash更新JArray。我需要找出数组是否没有任何空值,表明文件读取已经完成。
var t = j.Children().Where(s => (s.Type == JTokenType.Null));
count = t.Count();
我收到了异常
收藏被修改;枚举操作可能无法执行。
有没有办法让计数在原子上独立于线程。
我正在使用c#Threadpool来处理数据。
FileTransferThreadPool fftp = new FileTransferThreadPool();
ResultData rd = new ResultData(aol, data, hash);
fftp.Queue(rd);
public FileTransferThreadPool(int threadpoolsize = 2)
{
public bool Queue(ResultData rd){
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc), rd);
return true;
}
static void ThreadProc(Object stateInfo)
{
JObject jo = aol.root;
JArray j = (JArray)jo["hash"];
j[(int)aol.number] = hash;
var te = j.Children().Where(s => (s.Type == JTokenType.Null));
count = te.Count();
}
}