C# 从数据库种子方法调用异步方法

C# 从数据库种子方法调用异步方法,c#,asynchronous,asp.net-mvc-5,entity-framework-6,initializer,C#,Asynchronous,Asp.net Mvc 5,Entity Framework 6,Initializer,我正在编写一个MVC5 internet应用程序,想知道在创建数据库时如何从seed方法调用async方法 这是我的密码: public class ApplicationDbInitializer : CreateDatabaseIfNotExists<ApplicationDbContext> { protected override void Seed(ApplicationDbContext context) { SetupA

我正在编写一个MVC5 internet应用程序,想知道在创建数据库时如何从
seed
方法调用
async
方法

这是我的密码:

public class ApplicationDbInitializer : CreateDatabaseIfNotExists<ApplicationDbContext> 
{
    protected override void Seed(ApplicationDbContext context) {            
        SetupAdminAndSampleObjectsDatabase();
        base.Seed(context);
    }
}
我在这个方法中添加了多个对象

如果使用
wait
关键字调用
SetupAdminAndSampleObjectsDatabase
方法,则上述错误将得到解决,我这样说是否正确

总之,如何从数据库
seed
方法调用
async
方法?这可能吗


提前谢谢

您可以做以下两件事之一:

1) 使Seed方法异步,并使用wait

protected override async void Seed(ApplicationDbContext context) {            
        await SetupAdminAndSampleObjectsDatabase();
        base.Seed(context);
    }
2) 在异步方法上使用.waitAndUnwapeException()

protected override void Seed(ApplicationDbContext context) {            
        SetupAdminAndSampleObjectsDatabase().WaitAndUnwrapException();
        base.Seed(context);
    }

希望有帮助

多谢各位。我不知道我可以将async关键字添加到override方法中。请注意,如果使用选项1,则需要更改
SetupAdminAndSampleObjectsDatabase()的返回类型
to
Task
如果它最初是
void
Task
,则无论原始返回类型
T
是什么,都可以等待它。我不会太乐观地认为我可以放弃选项1。在这种情况下,调用者不会等待创建的任务,您可能会遇到类似的错误:“异步模块或处理程序已完成,而异步操作仍处于挂起状态”。MSDN声明async void只能“使异步事件处理程序成为可能”。
protected override void Seed(ApplicationDbContext context) {            
        SetupAdminAndSampleObjectsDatabase().WaitAndUnwrapException();
        base.Seed(context);
    }