Fast and robust worker for blocking and none-blocking asynchronous operations
Install-Package S4B.LazyAsyncNET
LazyAsync<DbData> lazyData = LazyAsync.Create(GetDbData);
// lazyData automatically renews after 1 hour, data expires after 12 hours (blocking update)
private async Task<(DbData, DateTime renewAt, DateTime expiresAt)> GetDbData()
{
DbData data;
using (var ctx = dbFactory())
{
// getting data from db
}
return (data, DateTime.UtcNow.AddHours(1), DateTime.UtcNow.AddHours(12));
}
private async Task<(DbData, DateTime renewAt, DateTime expiresAt)> GetDbData()
=> (await _someService.GetDbData(id), DateTime.UtcNow.AddSeconds(Ttl >> 1), DateTime.UtcNow.AddSeconds(Ttl))
var data = await lazyData;