c# - 排队异步函数调用

标签 c# asynchronous excel-dna

我正在使用 Excel-DNA 运行异步 excel 函数调用。我的 excel 函数通过通信接口(interface)调用 R。

据我了解comm接口(interface)不能异步调用,必须同步调用。恐怕 R 端的内部状态可能会搞砸这个过程,因此我想明确控制 excel 函数何时运行。

如何创建一个队列并一次只运行一个 excel 函数,即一个准备好后我就开始运行另一个函数。

是的,我确实想异步运行 excel 函数,因为它会阻止 excel session 被卡住。我知道这样做不会提高速度,但对用户来说“感觉更快”。

这是我的示例代码:

    [ExcelFunction]
    public static object AsyncRCallTest(int a1, int a2)
    {
        return ExcelAsyncUtil.Run("ASyncRCallTest", new object[] { a1, a2 }, delegate
        {
            try
            {
                var a = RConnection.Evaluate(a1);
                var b = RConnection.Evaluate(a2);
                return a + b;
            }
            catch (Exception err)
            {
                return err.Message;
            }
        });
    }

最佳答案

[MethodImpl(MethodImplOptions.Synchronized)] 似乎可以解决问题(请参阅下面的示例代码)。如果有人可以验证这一点,我会很高兴。

    [ExcelFunction]
    public static object AsyncRCallTest(int a1, int a2)
    {
        return ExcelAsyncUtil.Run("AsyncRCallTest", new object[] { a1, a2 }, delegate
        {
            return SyncRCallTest(a1, a2);
        });
    }


    [MethodImpl(MethodImplOptions.Synchronized)]
    public static object SyncRCallTest(int a1, int a2)
    {

        try
        {
            var a = RConnection.Evaluate(a1);
            var b = RConnection.Evaluate(a2);
            return a + b;
        }
        catch (Exception err)
        {
            return err.Message;
        }

    }

关于c# - 排队异步函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24954874/

相关文章:

c# - 使用 C# 在 Excel 中查找表格边界

add-in - 从 Excel 公式中的 UDF 中删除加载项路径

c# - 不按 Control 键选择多行

c# - 如何从 WPF ToggleButton 中删除默认镶边

c# - 具有嵌入式功能的 Linq

c# - 跟踪工作簿和工作表重命名

node.js - 从另一个 lambda 异步调用 aws lambda

javascript - 绕过并发 ajax 调用限制的最佳实践

javascript - 禁用iframe src的监听