У меня есть сообщение в блоге, в котором описывается несколько подходов к конструкции async
.
Я рекомендую асинхронный заводский метод, описанный Ридом, но иногда это невозможно (например, , внедрение зависимости). В этих случаях вы можете использовать асинхронный шаблон инициализации следующим образом:
public sealed class MyType
{
public MyType()
{
Initialization = InitializeAsync();
}
public Task Initialization { get; private set; }
private async Task InitializeAsync()
{
// Asynchronously initialize this instance.
await Task.Delay(100);
}
}
Вы можете затем построить тип обычно, но имейте в виду, что только конструкция запускает асинхронную инициализацию , Если вам нужен тип, который нужно инициализировать, ваш код может сделать:
await myTypeInstance.Initialization;
Обратите внимание, что если Initialization
уже завершено, выполнение (синхронно) продолжается после await
.
Если вам действительно нужно асинхронное свойство , у меня тоже есть сообщение в блоге. Ваша ситуация звучит так, как будто это может выиграть от AsyncLazy
:
public sealed class MyClass
{
public MyClass()
{
MyProperty = new AsyncLazy(async () =>
{
await Task.Delay(100);
return 13;
});
}
public AsyncLazy MyProperty { get; private set; }
}
Как насчет этого с отрицательным прогнозом и задним числом с положительным результатом ,
(?<!<a>)This Text needed(?!<\/a>)