首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步到异步-实现同步异步的最佳实践

同步到异步-实现同步异步的最佳实践
EN

Stack Overflow用户
提问于 2017-02-10 08:16:20
回答 1查看 589关注 0票数 2

我想知道用下面的方式做一些异步操作是否正确。

下面是使用Find方法获取一些数据的同步经典代码:

代码语言:javascript
复制
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);
    }

好吧,这没问题,因为它是经典的。

现在,为了拥有相同的异步方法,我可以这样写它:

代码语言:javascript
复制
    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);
    }

但是,下面的方法完全是做同样的事情吗?因为它可以让我编写异步方法,而不用编写粘贴查询参数的代码。

代码语言:javascript
复制
 public async override Task<Personne> FindAsync(object id)
    {
        return await Task.Run<Personne>(() => Find(id));
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-10 08:29:04

你张贴的代码与SingleOrDefaultAsync的运行方式不同,实际上它的性能可能比你不执行Task.Run/async要差,因为Task.Run有开销。

SingleOrDefaultAsync是对数据库的真正异步调用,事实上,如果您使用CancellationToken并取消查询,它实际上会终止数据库中的查询。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42149380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档