首页 新闻 会员 周边 捐助

【异步操作EF紧急】EF+AutoFactory+Async异步编程紧急求助

0
悬赏园豆:5 [已解决问题] 解决于 2017-07-08 11:48
List<string> l1 = new List<string>();
l1.Add("1");
l1.Add("2");
l1.Add("3");
l1.Add("4");
l1.ToList().ForEach(async q=>{
User models = await repo.GetAll<User>().SingleOrDefaultAsync(x => x.Account == q);
});

如图,紧急救助,怎么解决呢?

王庆东mas的主页 王庆东mas | 初学一级 | 园豆:4
提问于:2017-07-05 10:34
< >
分享
最佳答案
1

mthod1:

for(var item in li)

await repo.getAll.......

method2:

repo.getuser(x=>li.contains( x.account))

收获园豆:5
czd890 | 专家六级 |园豆:14488 | 2017-07-05 12:59

改变下写法就行了,ForEach(q=>{}) 改成 foreach()形式就不报错了。 不知道深层原因/? 

王庆东mas | 园豆:4 (初学一级) | 2017-07-05 13:40

@王庆东mas: .foreach简单来说就是:

ForEach(list,action){

  foreach(var item in list){

       action(item)

}

}

这样看,就能明白了吧

czd890 | 园豆:14488 (专家六级) | 2017-07-05 13:59

@czd890: ForEach里面是不是开很多线程? foreach只是当前线程?

王庆东mas | 园豆:4 (初学一级) | 2017-07-05 19:57

@王庆东mas: .ForEach:启动多个task了呀。

foreach(){await .....}: await了呀,变成单线程了呀

czd890 | 园豆:14488 (专家六级) | 2017-07-05 20:42

@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 | 园豆:4 (初学一级) | 2017-07-06 01:45

@王庆东mas: 

.ForEach 类似下面的代码,能理解了不。能立即的话,后面2个问题就不用说了

{
    ForEach(list){
      foreach(var item in list){
           this.action(item)
        }
    }
    async void action(item){
        await .....
    }
}
czd890 | 园豆:14488 (专家六级) | 2017-07-06 13:24

@czd890: 上面代码意思是:ForEach 里面会多开线程去中执行这个: User models = await repo.GetAll<User>().SingleOrDefaultAsync(x => x.Account == q)?  如果去掉 await我能理解,但是这边 await 一点意义都没吗?

王庆东mas | 园豆:4 (初学一级) | 2017-07-06 15:28

@王庆东mas: 对呀,就是循环启动了多个task嘛。因为async的方法,就要一路async到顶。但是.ForEach封装的方法显然做不到这个。所以,你懂的

czd890 | 园豆:14488 (专家六级) | 2017-07-06 18:39

@czd890: 希望如此

王庆东mas | 园豆:4 (初学一级) | 2017-07-08 11:48
其他回答(1)
0

异步要另外开一个数据连接

同一个数据库连接的异步没意义.因为连接只有一个.不可能同时执行多次sql

吴瑞祥 | 园豆:29449 (高人七级) | 2017-07-05 10:36

 改变下写法就行了,ForEach(q=>{}) 改成 foreach()形式就不报错了。 不知道深层原因/? 

支持(0) 反对(0) 王庆东mas | 园豆:4 (初学一级) | 2017-07-05 12:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册