Issue when opening a new workbook during a function call
Steps to reproduce:
- =Test(TODAY())
- Click Enter
- Within the 1 second wait, click Ctrl + N to launch a new workbook
The results will not be returned. Furthermore, any calls on new workbooks to '=Test(TODAY())' will immediately return 'Hello' (ie: not recalling the function, simply returning the cached result)
` using ExcelDna.Integration; using ExcelDna.Registration;
namespace DNABug { public class Class1 { public partial class Registration : IExcelAddIn { public void AutoOpen() => ExcelRegistration.GetExcelFunctions().ProcessAsyncRegistrations().RegisterFunctions(); public void AutoClose() { }
[ExcelFunction(Name = "Test")]
public static async Task<Object> Tester([ExcelArgument(Name = "p1")] object p1)
{
await Task.Delay(1000);
return "Hello";
}
}
}
} `
Calling RTD-based async functions with volatile inputs is a problem, and I don't have a good 'default' solution for this yet.
Some options:
- Make your own "TODAY.NV()" function that is not volatile.
- Cache the async result for a short time (a few seconds or minutes) and return directly from the cache. This would need some re-engineering of the function instead of using the default Task-processing.
It's certainly a problem and needs more thought but is a consequence of the Excel-DNA approach to implementing async functions. Not simple . . .
Thanks so much! And thanks for all your efforts on this project! Any chance you can point me to an example of the second approach?