diff --git a/osu.Game/Database/RealmContextFactory.cs b/osu.Game/Database/RealmContextFactory.cs
index 31dbb0c6c4..50e456a0c8 100644
--- a/osu.Game/Database/RealmContextFactory.cs
+++ b/osu.Game/Database/RealmContextFactory.cs
@@ -169,6 +169,41 @@ namespace osu.Game.Database
///
public bool Compact() => Realm.Compact(getConfiguration());
+ ///
+ /// Run work on realm with a return value.
+ ///
+ ///
+ /// Handles correct context management automatically.
+ ///
+ /// The work to run.
+ /// The return type.
+ public T Run(Func action)
+ {
+ if (ThreadSafety.IsUpdateThread)
+ return action(Context);
+
+ using (var realm = CreateContext())
+ return action(realm);
+ }
+
+ ///
+ /// Run work on realm.
+ ///
+ ///
+ /// Handles correct context management automatically.
+ ///
+ /// The work to run.
+ public void Run(Action action)
+ {
+ if (ThreadSafety.IsUpdateThread)
+ action(Context);
+ else
+ {
+ using (var realm = CreateContext())
+ action(realm);
+ }
+ }
+
public Realm CreateContext()
{
if (isDisposed)