【发布时间】:2017-02-10 08:37:14
【问题描述】:
我想知道通过以下方式进行一些异步操作是否正确。
这是使用 Find 方法获取一些数据的同步经典代码:
public override Personne Find(object id)
{
return this.dbSet.OfType<Personne>()
.Include(a => a.Adresse)
.Include(c => c.PersonneCivilite)
.SingleOrDefault<MajeurProtege>(p => p.PersonneId == (int)id);
}
好吧,这没问题,因为它是经典的。
现在有了相同的异步方法,我可以这样写:
public async override Task<Personne > FindAsync(object id)
{
return await this.dbSet.OfType<Personne >()
.Include(a => a.Adresse)
.Include(c => c.PersonneCivilite)
.SingleOrDefaultAsync<MajeurProtege>(p => p.PersonneId == (int)id);
}
但是以下方法是否严格执行相同的操作? 因为它可以让我在不粘贴查询参数的代码的情况下编写我的异步方法。
public async override Task<Personne> FindAsync(object id)
{
return await Task.Run<Personne>(() => Find(id));
}
【问题讨论】:
-
这个问题的意义何在?使用异步方法即可,也可以使用
FindAsync -
return Task.Run
(() => Find(id)).wait() -
@MikeDarwish 那么它不会是异步的
-
问题是关于我的异步代码(第二块)。它和我调用 SingleOrDefaultAsync 一样吗?
-
看起来您的问题在这里得到了回答:stackoverflow.com/questions/21817569/…,是的,您是正确的,用
SingleOrDefaultAsync替换SingleOrDefault就可以了。
标签: c# asynchronous entity-framework-6