ExcelDna icon indicating copy to clipboard operation
ExcelDna copied to clipboard

Issue when opening a new workbook during a function call

Open jwilder123 opened this issue 1 year ago • 2 comments

Steps to reproduce:

  1. =Test(TODAY())
  2. Click Enter
  3. 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";
        }
    }
}

} `

jwilder123 avatar Sep 19 '24 19:09 jwilder123

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 . . .

govert avatar Sep 21 '24 08:09 govert

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?

jwilder123 avatar Sep 21 '24 11:09 jwilder123