mthod1:
for(var item in li)
await repo.getAll.......
method2:
repo.getuser(x=>li.contains( x.account))
改变下写法就行了,ForEach(q=>{}) 改成 foreach()形式就不报错了。 不知道深层原因/?
@王庆东mas: .foreach简单来说就是:
ForEach(list,action){
foreach(var item in list){
action(item)
}
}
这样看,就能明白了吧
@czd890: ForEach里面是不是开很多线程? foreach只是当前线程?
@王庆东mas: .ForEach:启动多个task了呀。
foreach(){await .....}: await了呀,变成单线程了呀
@czd890: 1. 但是l1.ToList().ForEach(async q=>{ User models = await repo.GetAll<User>().SingleOrDefaultAsync(x => x.Account == q); });这边 有await呢!?
2. 还有,如果用for,是不是也和foreach一样呢?走主线程?
3. 第三个问题哈,ForEach 为什么不和foreach一样机制呢,名字太像了。。。
--
谢谢哈,待会分全给你。
@王庆东mas:
.ForEach 类似下面的代码,能理解了不。能立即的话,后面2个问题就不用说了
{ ForEach(list){ foreach(var item in list){ this.action(item) } } async void action(item){ await ..... } }
@czd890: 上面代码意思是:ForEach 里面会多开线程去中执行这个: User models = await repo.GetAll<User>().SingleOrDefaultAsync(x => x.Account == q)? 如果去掉 await我能理解,但是这边 await 一点意义都没吗?
@王庆东mas: 对呀,就是循环启动了多个task嘛。因为async的方法,就要一路async到顶。但是.ForEach封装的方法显然做不到这个。所以,你懂的
@czd890: 希望如此
异步要另外开一个数据连接
同一个数据库连接的异步没意义.因为连接只有一个.不可能同时执行多次sql
改变下写法就行了,ForEach(q=>{}) 改成 foreach()形式就不报错了。 不知道深层原因/?