我正在名为 Autodesk Revit 的设计程序中运行自定义插件,并且最近实现了异步使用情况报告,但此更改导致我的调用程序集发生更改。
在此更改之前,我正在同步记录使用情况,但这导致 UI 冻结了一秒钟。对异步的更改效果很好,但调用程序集似乎已更改。我这么说的原因是因为我将程序集版本记录为使用报告的一部分,因此我知道用户安装了哪个版本的插件,但现在调用程序集更改为 mscorlib 并且它显示了此 Microsoft 程序集的版本。
我尝试过调用程序集、执行程序集和入口程序集,但没有指向调用该方法的插件。有什么想法吗?
Version assemblyVersion = Assembly.GetCallingAssembly().GetName().Version;
这可能是因为异步的工作原理。
异步方法将被分成不同的部分,可能在不同的时间执行,因此是“异步的”。但这意味着除了第一部分之外,您将失去所有调用堆栈。这样做的结果是需要使用任务来返回东西。 “async”、Task 和“await”实际上允许您假装该方法正常运行,同时在幕后做一些完全不同的事情。
如果您直接检查调用堆栈,这种错觉就会被打破。您只会看到从线程池中调用您的方法,而不知道最初是什么导致了调用。这很可能是调用程序集不同的原因。
有几种可能的解决方案: