问题的原因是IOptionsMonitor使用了内部缓存,这在一个异步线程处理更改时可能会导致异常。解决此问题的方法是使用IOptionsSnapshot接口,该接口具有相同的功能,但不使用缓存。以下是使用IOptionsSnapshot的示例代码:
services.AddSingleton(provider =>
{
var options = provider.GetService>();
return options.Value;
});
private readonly MyConfiguration _config;
public MyService(IOptionsSnapshot config)
{
_config = config.Value;
}