public async Task Manage_OneTrans_InvokeAsync() { await GeneratePerfRangesForRealm(async (cache, size) => { var toWrite = PerfHelper.GenerateRandomDatabaseContents(size); var st = new Stopwatch(); st.Start(); using (var realmThread = new RealmThread(cache.Config)) { await realmThread.InvokeAsync(async(threadSafeRealm) => { // Mock something using an await in this lamba await Task.FromResult(true); threadSafeRealm.Write(() => { foreach (var kvp in toWrite) { var obj = new KeyValueRecord(); obj.Key = kvp.Key; obj.Value = kvp.Value; threadSafeRealm.Add(obj); } }); }); } st.Stop(); return(st.ElapsedMilliseconds); }); }
public async Task ThreadInvokeAsync_SingleContinuation() { string path; using (Utility.WithEmptyDirectory(out path)) using (var fixture = CreateRealmsInstance(path)) using (var t = new RealmThread(fixture.Config)) { await t.InvokeAsync(async r => { await Task.FromResult(true); // Simulate some Task, i.e. a httpclient request.... r.Write(() => { var obj = new KeyValueRecord(); obj.Key = "key"; r.Add(obj); }); }); t.Invoke(r => { Assert.NotNull(r.Find <KeyValueRecord>("key")); }); fixture.Refresh(); Assert.NotNull(fixture.Find <KeyValueRecord>("key")); } }
public async Task ThreadInvokeAsync() { string path; using (Utility.WithEmptyDirectory(out path)) using (var fixture = CreateRealmsInstance(path)) using (var t = new RealmThread(fixture.Config)) { await t.InvokeAsync(async r => { await r.WriteAsync((aNewRealm) => { var obj = new KeyValueRecord(); obj.Key = "key"; aNewRealm.Add(obj); }); }); t.Invoke(r => { Assert.NotNull(r.Find <KeyValueRecord>("key")); }); fixture.Refresh(); Assert.NotNull(fixture.Find <KeyValueRecord>("key")); } }
protected static async Task <List <string> > GenerateRealmDB(Realms.Realm targetCache, int size) { var ret = new List <string>(); // Write out in groups of 4096 while (size > 0) { var toWriteSize = Math.Min(4096, size); var toWrite = PerfHelper.GenerateRandomDatabaseContents(toWriteSize); using (var rt = new RealmThread(targetCache.Config)) { await rt.InvokeAsync(async(Realms.Realm arg) => { await arg.WriteAsync((r) => { foreach (var item in toWrite) { var c = new KeyValueRecord { Key = item.Key, Value = item.Value }; r.Add(c); // update: false } }); }); } foreach (var k in toWrite.Keys) { ret.Add(k); } size -= toWrite.Count; } return(ret); }
public async Task ThreadInvokeAsync_MultipleContinuations() { string path; using (Utility.WithEmptyDirectory(out path)) using (var fixture = CreateRealmsInstance(path)) using (var t = new RealmThread(fixture.Config)) { await t.InvokeAsync(async r => { await Task.FromResult(true); // Simulate some Task, i.e. a httpclient request.... r.Write(() => { var obj = r.CreateObject <KeyValueRecord>(); obj.Key = "key"; }); await Task.Delay(1); r.Write(() => { var obj = r.CreateObject <KeyValueRecord>(); obj.Key = "key2"; }); await Task.Delay(1); r.Write(() => { var obj = r.CreateObject <KeyValueRecord>(); obj.Key = "key3"; }); }); t.Invoke(r => { Assert.NotNull(r.ObjectForPrimaryKey <KeyValueRecord>("key")); }); fixture.Refresh(); Assert.NotNull(fixture.ObjectForPrimaryKey <KeyValueRecord>("key")); } }