Always Encryption using Azure Functions - 试图通过静态变量避免重复初始化

Always Encryption using Azure Function - Trying to Avoid Duplicate Initialization via Static Variables

我正在使用 Azure Functions 来存储加密数据。我已经使用下面的代码成功地做到了这一点;但是,尝试多次初始化密钥存储提供程序会引发错误 Key store providers cannot be set more than once。为了避免这种情况,我设置了一个静态变量来跟踪它是否已被初始化。这在短时间内非常有效。但是,每次我第二天第一次尝试时,函数都会出现同样的错误。对我来说有趣的是,如果 isInitialized 静态变量在一段时间后失去它的值, _clientCredential 变量不应该也被重置,这意味着再次尝试设置提供者是可以的?

private static ClientCredential _clientCredential;
private static Boolean isInitialized;

if (isInitialized == false) {
    isInitialized = true;
    string clientId = ConfigurationManager.ConnectionStrings["blah"].ConnectionString;
    string clientSecret = ConfigurationManager.ConnectionStrings["blah"].ConnectionString;
    _clientCredential = new ClientCredential(clientId, clientSecret);

    SqlColumnEncryptionAzureKeyVaultProvider azureKeyVaultProvider = new SqlColumnEncryptionAzureKeyVaultProvider(GetToken);

    Dictionary<string, SqlColumnEncryptionKeyStoreProvider> providers = new Dictionary<string, SqlColumnEncryptionKeyStoreProvider>();
    providers.Add(SqlColumnEncryptionAzureKeyVaultProvider.ProviderName, azureKeyVaultProvider);

    SqlConnection.RegisterColumnEncryptionKeyStoreProviders(providers);
}

似乎正在重置其中一个变量,而不是另一个。我知道使用 Azure Functions 也存在线程安全问题。有没有其他方法来检查它是否仍然完全初始化以完全避免线程安全问题?或者我是否需要自己避免线程安全问题和会话状态?

我已经看到另一个 post 关于这个主题,但没有关于如何处理上述问题的真正解释。

静态成员在同一函数的不同调用之间共享,这可能会导致竞争条件。使用静态构造函数来初始化共享资源。