Uwp 为什么需要提取此WinRT函数,而其他函数则不需要?

Uwp 为什么需要提取此WinRT函数,而其他函数则不需要?,uwp,windows-runtime,Uwp,Windows Runtime,该报告全文如下: 注意上面的TryEnablePrelaunch()函数。调用CoreApplication.EnablePrelaunch()被分解到该函数中的原因是,当调用一个方法时,JIT(即时编译)将尝试编译整个方法。如果您的应用程序运行的Windows 10版本不支持CoreApplication.EnablePrelaunch(),则JIT将失败。通过将调用分解为一个仅在应用程序确定平台支持CoreApplication.EnablePrelaunch()时调用的方法,我们避免了这个

该报告全文如下:

注意上面的
TryEnablePrelaunch()
函数。调用
CoreApplication.EnablePrelaunch()
被分解到该函数中的原因是,当调用一个方法时,JIT(即时编译)将尝试编译整个方法。如果您的应用程序运行的Windows 10版本不支持
CoreApplication.EnablePrelaunch()
,则JIT将失败。通过将调用分解为一个仅在应用程序确定平台支持
CoreApplication.EnablePrelaunch()
时调用的方法,我们避免了这个问题


为什么在这里有必要大惊小怪,而在这里似乎没有必要呢?

事实上,确保API在设备上是否可用总是很重要的。第一个文档中的注释强调了不应使用当前OS版本中不可用的API的原因。第二个文档对此进行了总结,并展示了检查API可用性的常用方法


这两个函数都说明了API可用性的重要性。

但只有对
CoreApplication.EnablePrelaunch()
而言,才有必要将此类调用提取到单独的函数中?文档中的所有其他示例只调用WinRT函数(在检查其可用性后),它们从不将它们提取到单独的函数中。它只是解释了一种方法以及这样做的原因。您也可以对其他函数执行相同的操作。关键的一点是,对可能不支持所有版本的API进行API可用性检查非常重要。我仍然不明白。如果有必要将所有WinRT函数封装到单独的函数中,否则包含调用的方法将不会由JIT编译器编译(为什么这里会涉及JIT编译?),随着时间的推移,这将变得相当麻烦,或者应用程序只会在较旧的Windows版本上崩溃。然后,API检查无论如何都是多余的。。。我的谬论在哪里?首先,并非所有API都需要进行API可用性检查。其次,将方法放入单独函数的方式是可选的。您可以直接调用此API。因为关键步骤API可用性检查是在第一步中完成的。您所需要做的就是检查结果,看看设备是否能够运行目标API。感谢您抽出时间。好吧,到目前为止我就是这么认为的。。。那么为什么有必要对CoreApplication.EnablePrelaunch()进行解压缩呢?
CoreApplication.EnablePrelaunch()
有什么特别之处,需要将其提取到一个单独的方法中(否则,无论前面的检查如何,程序都会崩溃,因为即使检查也不会运行)?