C# 异步和等待错误。等待后代码未处理

C# 异步和等待错误。等待后代码未处理,c#,asp.net,.net,entity-framework,asynchronous,C#,Asp.net,.net,Entity Framework,Asynchronous,我已经开始在c#中使用async和Wait,我遇到了一个问题,并得到一个错误消息 异步模块或处理程序在异步操作仍挂起时完成。 我使用的是EntityFramework6,我有一个基本服务,每个服务都从中继承,看起来是这样的 public BaseService(TEntity) where TEntity : class { private DataContext _context; public BaseService(DataContext context) {

我已经开始在c#中使用async和Wait,我遇到了一个问题,并得到一个错误消息

异步模块或处理程序在异步操作仍挂起时完成。

我使用的是EntityFramework6,我有一个基本服务,每个服务都从中继承,看起来是这样的

public BaseService(TEntity) where TEntity : class {
    private DataContext _context;

    public BaseService(DataContext context) {
        _context = context;
    }

    public virtual async Task<TEntity> AddAsync(TEntity t)
    {
        if (_context.Entry<TEntity>(t).State == EntityState.Detached)
        {
            _context.Set<TEntity>().Add(t);
        }

        _context.Entry<TEntity>(t).State = EntityState.Added;

        await _context.SaveChangesAsync();

        return t;
    }
}
现在,一旦调用了我的初始值设定项,只有1个权限被添加到数据库中,其他什么都不会发生

我的异步设置正确了吗

我对async/await的理解是,如果我调用这样的方法

protected async override void Seed(DataContext context) {
    await AddPermissions(context);
    await AddGroups(context);
    await AddUsers(context);
    await AddPermissionsToGroups(context);
    await AddUsersToGroups(context);

    // ... more here
}

private async Task AddGroups(DataContext context)
    {
        var groupService = new GroupService(context);

        await groupService.AddAsync(new Group() { Name = "Admin" });
    }

    private async Task AddPermissions(DataContext context)
    {
        var permissionService = new PermissionService(context);

        await permissionService.AddAsync(new Permission("CanAdd", ""));
        await permissionService.AddAsync(new Permission("CanEdit", ""));
        await permissionService.AddAsync(new Permission("CanDelete", ""));
        await permissionService.AddAsync(new Permission("CanView", ""));

        ... more there about 10
    }

    private async Task AddUsers(DataContext context)
    {
        var userService = new UserService(context);

        await userService.AddAsync(new User() { UserName = "name@email.com" });
    }

    private async Task AddPermissionsToGroups(DataContext context)
    {
        var groupService = new GroupService(context);

        // add all permissions to admin
        var adminGroup = context.Groups.Where(e => e.Name == "Admin").FirstOrDefault();
        var permissions = context.Permissions.ToList();

        foreach (var item in permissions)
        {
            await groupService.AddPermissionAsync(adminGroup, item);
        }

    }

    private async Task AddUsersToGroups(DataContext context)
    {
        var userService = new UserService(context);
        var user = context.Users.Where(e => e.UserName == "name@mail.com").FirstOrDefault();
        var group = context.Groups.Where(e => e.Name == "Admin").FirstOrDefault();

        await userService.AddToGroup(user, group);
    }
}
await my_async_method
然后将调用此方法,在完成此任务之前,不会处理任何内容。在我调用的方法中,我应该

public async Task my_async_method() {
    await MyCallAsync();
}
我需要任务的返回参数吗?它应该是空的吗


如果我错了,欢迎任何指导来纠正我,但我认为EF6只允许每个
DbContext
执行一个异步操作。因此,您必须将代码更改为:

public async Task AddPermissionAsync(Group group, Permission permission)
{
  using(var context = new DbContext())
  {
    // do the add and save stuff
  }
}

你说得不太对<代码>等待确保在当前操作完成之前不会执行其他操作。导致操作异步执行的不是
async/await
,而是使代码等待已异步的操作的原因。从何处获得错误以及异常的调用堆栈是什么?此错误通常由
async void
方法引起,或者不正确地使用基于事件的异步模式(EAP)组件。尽量减少复制。
public async Task AddPermissionAsync(Group group, Permission permission)
{
  using(var context = new DbContext())
  {
    // do the add and save stuff
  }
}