aboutsummaryrefslogtreecommitdiff
path: root/lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2023-01-27 21:13:17 -0500
committerLibravatar vnugent <public@vaughnnugent.com>2023-01-27 21:13:17 -0500
commit282aad617b9c39a6f14c1cf527f6dd4523d0c54b (patch)
treed2942722aad3c2fb087f8639a5fc667f6767456c /lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs
parent94ee5cc9090b40fe042187362acd18c0995866f4 (diff)
Object cache overhaul and logger updates
Diffstat (limited to 'lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs')
-rw-r--r--lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs22
1 files changed, 18 insertions, 4 deletions
diff --git a/lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs b/lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs
index 25dc4ec..743566d 100644
--- a/lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs
+++ b/lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs
@@ -38,6 +38,7 @@ using VNLib.Plugins.Essentials.Accounts;
namespace VNLib.Plugins.Extensions.Loading
{
+
/// <summary>
/// Provides common loading (and unloading when required) extensions for plugins
/// </summary>
@@ -225,7 +226,7 @@ namespace VNLib.Plugins.Extensions.Loading
/// <param name="delayMs">An optional startup delay for the operation</param>
/// <returns>A task that completes when the deferred task completes </returns>
/// <exception cref="ObjectDisposedException"></exception>
- public static async Task DeferTask(this PluginBase plugin, Func<Task> asyncTask, int delayMs = 0)
+ public static async Task ObserveTask(this PluginBase plugin, Func<Task> asyncTask, int delayMs = 0)
{
/*
* Motivation:
@@ -266,6 +267,20 @@ namespace VNLib.Plugins.Extensions.Loading
}
}
+
+ /// <summary>
+ /// Schedules work to begin after the specified delay to be observed by the plugin while
+ /// passing plugin specifie information. Exceptions are logged to the default plugin log
+ /// </summary>
+ /// <param name="plugin"></param>
+ /// <param name="work">The work to be observed</param>
+ /// <param name="delayMs">The time (in milliseconds) to delay dispatching the work item</param>
+ /// <returns>The task that represents the scheduled work</returns>
+ public static Task ObserveWork(this PluginBase plugin, IAsyncBackgroundWork work, int delayMs = 0)
+ {
+ return ObserveTask(plugin, () => work.DoWorkAsync(plugin.Log, plugin.UnloadToken), delayMs);
+ }
+
/// <summary>
/// Registers an event to occur when the plugin is unloaded on a background thread
/// and will cause the Plugin.Unload() method to block until the event completes
@@ -292,10 +307,9 @@ namespace VNLib.Plugins.Extensions.Loading
}
//Registaer the task to cause the plugin to wait
- return pbase.DeferTask(() => WaitForUnload(pbase, callback));
+ return pbase.ObserveTask(() => WaitForUnload(pbase, callback));
}
-
private sealed class PluginLocalCache
{
private readonly PluginBase _plugin;
@@ -356,7 +370,7 @@ namespace VNLib.Plugins.Extensions.Loading
public void LoadSecret(PluginBase pbase)
{
- _ = pbase.DeferTask(() => LoadSecretInternal(pbase));
+ _ = pbase.ObserveTask(() => LoadSecretInternal(pbase));
}
private async Task LoadSecretInternal(PluginBase pbase)