我使用vs 2013时,.net mvc ef 使用异步操作数据库,为何第一个异步操作生效,第二个异步操作无法生效
代码如下:
public async Task RemoveArticle(Guid articleId)
{
using (IDAL.IArticleToBlogFlag ToflagSev = new DAL.ArticleToBlogFlag())
{
var data = ToflagSev.getAllData().Where(m => m.articleId == articleId).ToList();
foreach (var item in data)
{
await ToflagSev.removeAsync(item.ID, false);
}
await ToflagSev.Saved();
using (IDAL.IArticleService articleSev = new DAL.ArticleService())
{
await articleSev.removeAsync(articleId);
}
}
}
为何只有第一个await 后面的生效,第二个即使调试也跳过。
public async Task Saved()
{
await _db.SaveChangesAsync();
_db.Configuration.ValidateOnSaveEnabled = true;
}
保存方法在这里
执行完成了呗
可是数据库并没有发生变化,修改,添加也是如此。
await articleSev.Saved(); 不应该加个这个吗
有的,我直接封装在removeAsync(T model,saved = true) 方法里面的。
也许是抛出了未捕获的异常
我也尝试过捕获,我捕获不到,然后我把第一个异步方法变成同步方法,就可以完美执行。
我想不明白到底哪里错了。
@seed阿斯顿: 未可知也
@会长: 纠结。。。。
不懂诶,
这个 await ToflagSev.Saved(); 为啥不是SavedAsync呢
这个是我写的一个方法,里面是SavedAsync。
只有你自己知道函数里面怎么实现的...反正按正常逻辑,你第二删除没Save。
把简单的事情复杂化,真真的佩服这种程序员。说个故事,以前我去用一个官方的简单的ORM,然后那个那个老程序员就觉得自己以前写的ORM牛X,但特么的连Connection用法都没搞清楚,把团队带坑是经常的事。我是不管的,悄悄的用专业的代码就好。
且不论具体里面的实现代码了,你们这么写await累不累~~明明一排串行,非要活生生搞成并行,然后再串行...少一个单词也是体力啊。
我已经在方法里面使用了save方法。我是弄了好久才提的这个问题,如果是小失误什么的我早就查到了.用async是因为别人说会极大的提升网站的速度,想用一下。