From 7f40da8e2011c6ccb907a9b0d77490840b96e5f9 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Mon, 17 Nov 2025 06:21:04 +0100 Subject: [PATCH] async PluginFunction --- Pilz.Features/Pilz.Features.csproj | 2 +- Pilz.Features/PluginFunction.cs | 46 ++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/Pilz.Features/Pilz.Features.csproj b/Pilz.Features/Pilz.Features.csproj index d241141..35636d5 100644 --- a/Pilz.Features/Pilz.Features.csproj +++ b/Pilz.Features/Pilz.Features.csproj @@ -8,7 +8,7 @@ - 2.12.0 + 2.13.0 \ No newline at end of file diff --git a/Pilz.Features/PluginFunction.cs b/Pilz.Features/PluginFunction.cs index 50884a6..a654885 100644 --- a/Pilz.Features/PluginFunction.cs +++ b/Pilz.Features/PluginFunction.cs @@ -34,7 +34,7 @@ public abstract class PluginFunction : PluginFeature public virtual object? Execute(PluginFunctionParameter? @params) { - object? result = default; + object? result = null; if (OnPreExecute(@params, ref result)) result = ExecuteFunction(@params); @@ -43,6 +43,48 @@ public abstract class PluginFunction : PluginFeature return result; } + + public virtual Task ExecuteAsync() + { + return ExecuteAsync((PluginFunctionParameter?)null); + } - protected abstract object? ExecuteFunction(PluginFunctionParameter? @params); + public virtual Task ExecuteAsync(params object?[]? @params) + { + return ExecuteAsync(new PluginFunctionSimpleParamter(@params)); + } + + public virtual Task ExecuteAsync(params object?[]? @params) + { + return ExecuteAsync(new PluginFunctionSimpleParamter(@params)); + } + + public virtual async Task ExecuteAsync(PluginFunctionSimpleParamter? @params) + { + if (await ExecuteAsync(@params) is T result) + return result; + return default; + } + + public virtual async Task ExecuteAsync(PluginFunctionParameter? @params) + { + object? result = null; + + if (OnPreExecute(@params, ref result)) + result = await ExecuteFunctionAsync(@params); + + OnPostExecute(@params, ref result); + + return result; + } + + protected virtual object? ExecuteFunction(PluginFunctionParameter? @params) + { + return ExecuteFunctionAsync(@params).GetAwaiter().GetResult(); + } + + protected virtual Task ExecuteFunctionAsync(PluginFunctionParameter? @params) + { + return Task.FromResult(ExecuteFunction(@params)); + } }