Инициализация asyn c rest api вместо того, чтобы делать это в конструкторе - c#. Net - PullRequest
0 голосов
/ 07 мая 2020

Мне нужно получить некоторые данные с помощью вызовов отдыха и кэшировать их, чтобы их можно было использовать в SDK, над которым я работаю. Просто хотел убедиться, что это правильный подход, или хотел бы знать, можно ли это сделать лучше

public class Library {

    private bool isInitialized;
    public Library(...dependencies) {}

    public async Task InitializeAsync() {
        if (!isInitialized) {
            var data1 = await "api call";
            var data2 = await "api call2";

            isInitialized = true
            //cache them
        }
    }
}

1 Ответ

0 голосов
/ 07 мая 2020

Вы должны использовать Lazy<> с настройками безопасности потоков.

publi c class Library {

private Lazy<somedata> _someData;
public Library(...dependencies) 
{
    _someData = new Lazy<somedata>(() => initialise and store data);
}

public void DoSomething()
{
    var somedata = _someData.Value; <--- this will initialise the first time it's used
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...