C# 如何解决ApiController初始化时必须使用wait方法的问题

C# 如何解决ApiController初始化时必须使用wait方法的问题,c#,asp.net-web-api,multi-tenant,asp.net-apicontroller,C#,Asp.net Web Api,Multi Tenant,Asp.net Apicontroller,所以我有一个所有控制器都继承自的基本控制器,它实现了ApiController,在override initialize中,我有如下内容: protected override void Initialize(HttpControllerContext controllerContext) { var tenantId= requestUtils.GetFromHeader(controllerContext.Request); if (tenan

所以我有一个所有控制器都继承自的基本控制器,它实现了ApiController,在override initialize中,我有如下内容:

    protected override void Initialize(HttpControllerContext controllerContext)
    {
        var tenantId= requestUtils.GetFromHeader(controllerContext.Request);
        if (tenantId!= null)
            log4net.ThreadContext.Properties["tenantId"] = tenantId;
        else
            log4net.ThreadContext.Properties["tenantId"] = "default";
        await unitOfWork.SetTenantIdentifier(tenantIdentifier);
        base.Initialize(controllerContext);
    }
我需要为unitofwork设置tenantId(因为我有多租户解决方案),并且在它之前需要等待(因为我需要从db中获取一些东西),但是我无法使初始化成为异步任务,所以我正在尝试找到一个解决方法

 //await unitOfWork.SetTenantIdentifier(tenantIdentifier);
 unitOfWork.SetTenantIdentifier(tenantIdentifier).Wait();

您应该验证Wait()上没有死锁的风险。

为什么不使用
.GetAwaiter().GetResult()
,只是为了确保从该方法调用中产生的任何异常都不会包装在
聚合异常中(同意:),但是避免GetResult()的准则已经过了它的主要阶段。在微软编写的代码库(不是Roslyn)中,有很多例子在仅同步的上下文中使用它。我没有从这两种方式中得到任何结果,没有崩溃(甚至没有错误),但控制器也没有返回任何东西,我猜请求最终会被卡在某个地方?我没有更新数据库,我只是将租户设置为知道目标数据库。(不同的租户=不同的连接字符串)每次设置租户(每个租户的差异密钥)时,我都会获取一个加密密钥,要获取它,我需要它有一个等待。