Excel-DNA / ExcelDna

Excel-DNA - Free and easy .NET for Excel. This repository contains the core Excel-DNA library.
https://excel-dna.net
zlib License
1.3k stars 276 forks source link

Issue when opening a new workbook during a function call #721

Open jwilder123 opened 1 month ago

jwilder123 commented 1 month ago

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";
        }
    }
}

} `

govert commented 1 month ago

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:

It's certainly a problem and needs more thought but is a consequence of the Excel-DNA approach to implementing async functions. Not simple . . .

jwilder123 commented 1 month ago

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?