C# 我们是否应该等待这行代码,因为我们没有在这里访问数据库?

C# 我们是否应该等待这行代码,因为我们没有在这里访问数据库?,c#,asynchronous,async-await,entity-framework-core,C#,Asynchronous,Async Await,Entity Framework Core,我的要求是在签入DB之前检查contactType对象是否添加到dbcontext对象中。我有一个关于wait的问题。 问题1。由于我们没有触及数据库,我们是否需要等待该条目被添加到内存中的对象(即dbcontext),并且我们正在对此进行检查 public async Task<ContactType> GetOrCreateContactType(string contactTypeName) {

我的要求是在签入DB之前检查contactType对象是否添加到dbcontext对象中。我有一个关于wait的问题。
问题1。由于我们没有触及数据库,我们是否需要等待该条目被添加到内存中的对象(即dbcontext),并且我们正在对此进行检查

 

    public async Task<ContactType> GetOrCreateContactType(string contactTypeName)
                {
                    if (string.IsNullOrWhiteSpace(contactTypeName))
                    {
                        return null;
                    }
                    ContactType contactType;
                    contactType = _dbContext.ChangeTracker.Entries()
                                                       .Where(x => x.State == EntityState.Added && x.Entity is ContactType)
                                                       .Select(x => x.Entity as ContactType)
                                                       .FirstOrDefault(t => t.Name.ToUpper() == contactTypeName.ToUpper());
                    if (contactType != null)
                    {
                        return contactType;
                    }
                    else
                    {
                        contactType = await _dbContext.ContactTypes.SingleOrDefaultAsync(x => x.Name.ToUpper() == contactTypeName.ToUpper());
                        if (contactType != null)
                        {
                            return contactType;
                        }
                    }
                    //create if ContactType does not exists:
                    contactType = new ContactType()
                    {
                        Name = contactTypeName
                    };
                    _dbContext.ContactTypes.Add(contactType);
                    return contactType;
                }


公共异步任务GetOrCreateContactType(字符串contactTypeName)
{
if(string.IsNullOrWhiteSpace(contactTypeName))
{
返回null;
}
接触式接触式;
contactType=\u dbContext.ChangeTracker.Entries()
.Where(x=>x.State==EntityState.Added&&x.Entity为ContactType)
.选择(x=>x.实体作为ContactType)
.FirstOrDefault(t=>t.Name.ToUpper()==contactTypeName.ToUpper());
如果(contactType!=null)
{
返回触点类型;
}
其他的
{
contactType=await\u dbContext.ContactTypes.SingleOrDefaultAsync(x=>x.Name.ToUpper()==contactTypeName.ToUpper());
如果(contactType!=null)
{
返回触点类型;
}
}
//如果ContactType不存在,则创建:
contactType=新的contactType()
{
Name=contactTypeName
};
_dbContext.ContactTypes.Add(contactType);
返回触点类型;
}
还是这个

public async Task<ContactType> GetOrCreateContactType(string contactTypeName)
        {
            if (string.IsNullOrWhiteSpace(contactTypeName))
            {
                return null;
            }
            ContactType contactType=null;
             await Task.Run(() =>
            {
                contactType = _dbContext.ChangeTracker.Entries()
                                                 .Where(x => x.State == EntityState.Added && x.Entity is ContactType)
                                                 .Select(x => x.Entity as ContactType)
                                                 .FirstOrDefault(t => t.Name.ToUpper() == contactTypeName.ToUpper());
            });
            if (contactType != null)
            {
                return contactType;
            }
            else
            {
                contactType = await _dbContext.ContactTypes.SingleOrDefaultAsync(x => x.Name.ToUpper() == contactTypeName.ToUpper());
                if (contactType != null)
                {
                    return contactType;
                }
            }
            //create if ContactType does not exists:
            contactType = new ContactType()
            {
                Name = contactTypeName
            };
            _dbContext.ContactTypes.Add(contactType);
            return contactType;
        }
公共异步任务GetOrCreateContactType(字符串contactTypeName)
{
if(string.IsNullOrWhiteSpace(contactTypeName))
{
返回null;
}
ContactType ContactType=null;
等待任务。运行(()=>
{
contactType=\u dbContext.ChangeTracker.Entries()
.Where(x=>x.State==EntityState.Added&&x.Entity为ContactType)
.选择(x=>x.实体作为ContactType)
.FirstOrDefault(t=>t.Name.ToUpper()==contactTypeName.ToUpper());
});
如果(contactType!=null)
{
返回触点类型;
}
其他的
{
contactType=await\u dbContext.ContactTypes.SingleOrDefaultAsync(x=>x.Name.ToUpper()==contactTypeName.ToUpper());
如果(contactType!=null)
{
返回触点类型;
}
}
//如果ContactType不存在,则创建:
contactType=新的contactType()
{
Name=contactTypeName
};
_dbContext.ContactTypes.Add(contactType);
返回触点类型;
}

所以唯一的区别就是
任务。在它之前运行
和等待
任务?是的。这就是区别。为什么要在线程池上运行该代码?请使用第一个代码示例。