排队异步函数调用
本文关键字:函数调用 异步 排队 | 更新日期: 2023-09-27 18:14:53
我使用excel - dna来运行异步excel函数调用。我的excel函数通过一个通信接口调用R。
据我所知,通信接口不能异步调用,必须同步调用。我担心R方面的内部状态可能会把这个过程搞砸,因此我想对excel函数何时运行有一个明确的控制。
我如何创建一个队列,一次只运行一个excel函数,即一旦一个准备好了,我就开始运行另一个函数。
是的,我确实想异步运行excel函数,因为它阻止excel会话被冻结。我知道这样做并不能提高速度,但是用户会感觉更快。
下面是我的示例代码: [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;
}
});
}
[methodimpll (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;
}
}