a-second-operation-started-on-this-context-before-a-previous-operation-completed

  分页统计时出现上述错误,错误写法:

var taskList = query.OrderBy(a => a.Seq).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
var taskCount = query.CountAsync();

var list = await taskList;
var count = await taskCount;

  开始觉得既然是异步,那同时执行效率会更高,现实是打脸的。。。好吧,只能换个写法

var list =await query.OrderBy(a => a.Seq).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
var count =await query.CountAsync();

  异步等待第一个执行完再执行第二个。那异步的意义是什么呢,这样跟同步花的时间并没有减少,的确,在一次请求中并没有提高效率,提高的只是web程序的吞吐量,异步后将由其它线程执行,web线程可以继续处理新的请求。

  为什么2个同时执行会出错呢?我想应该是dbcontext是线程不安全的原因吧,但有一点奇怪的是本地执行不会报错,而发布后生成环境就经常出现这个错误,这是什么原因还请知道的大神赐教!!!

猜你喜欢

转载自www.cnblogs.com/shanqiu861001/p/11653776.html