首页 > 解决方案 > .NET Core DI 属性中的异步提供程序

问题描述

关于这个主题和答案,我有用于异步服务注册的适配器: Async provider in .NET Core DI

它看起来非常好。但是我有一些服务,我在界面中有属性。属性不能是异步的,但我需要等待客户端对象:var client = await this.connectedClient.Value;

我的意思是我不能使用public bool Connected => (await this.connectedClient.Value).Connected;

在这种情况下我该怎么办?

public interface IMyAppService
{
    bool Connected{ get; }
    string Host{ get; }
    Task<Data> GetData();
    Task SendData(Data data);
}

PS:我不想.Result等等.GetAwaiter().GetResult()。我知道那里可能会陷入僵局

标签: c#.netasp.net-core

解决方案


鉴于 Steven 在链接问题中建议的适配器结构,您可以简单地将Connected属性实现为:

public bool Connected => this.connectedClient.IsValueCreated;

但在一般情况下,无法在属性 getter 或 setter 中异步运行代码。


推荐阅读