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);
            });
        }
Exemple #2
0
        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"));
                    }
        }
Exemple #3
0
        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"));
                    }
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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"));
                    }
        }