public async Task <Result <string> > ToShortAsync(string longUrl) { var result = new Result <string>(); var r = await _session.HasAsync(longUrl); int retry = 10; while (!r.Succeeded && retry > 0) { var shortId = RandomEx.GenerateString(6); var link = new Link { Id = shortId, LongUrl = longUrl }; r = await _session.AddAsync(link); retry--; } return(r.Succeeded ? result.Ok(r.Value.Id) : result.Merge(r)); }