帮助我理解这一点:
在我的WPF(.NET 4.6.2)应用程序中,我尝试使用AsyncLocal来处理登录并在线程上设置经过身份验证的用户。问题归结为这个简化的代码。在Loaded事件中,我在主线程上设置了一个默认值。在单击按钮的处理程序中,我假设此默认值仍然存在,但它不是。现在,AsyncLocal值已经消失,并再次返回null。我已经检查了很多次,并且线程始终是具有相同id的相同主线程。为什么这不像我预期的那样工作?
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public static AsyncLocal<object> Test = new AsyncLocal<object>();
private void Button_Click(object sender, RoutedEventArgs e)
{
if (Test.Value == null) // same main thread here as well
{
Test.Value = 2; // should not get here?
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Test.Value = 1; // get here on main thread
}
}
答案 0 :(得分:0)
正如评论中所指出的,在Loaded事件之后清除执行上下文。所以我基本上没有尝试在那之前设置AsyncLocal,并期望现在可以工作,我知道这不是一个选项。事实证明,我并不是真的需要它,只是想知道它为什么不起作用。