我在所有Kephas示例中都注意到,调用异步方法时,最后会调用PreserveThreadContext()
。这是做什么的?
一些例子:
var result = await dataContext.Query<Document>()
.ToListAsync()
.PreserveThreadContext();
我了解ConfigureAwait(false)
,这有点相似吗?
答案 0 :(得分:1)
从某种意义上讲,是的,这意味着在服务器环境中它还包括对ConfigureAwait(false)
的调用。但是,从异步调用返回后,它还恢复了线程绑定的区域性(和UI文化),因此可以以一致的方式对字符串进行本地化。这是由于您可能会在返回时发现自己处于另一个线程中,在这里,区域性是默认区域性,而不是配置的区域性。
另外,您可以添加自己的行为来存储/恢复其他线程绑定信息。
为此,请检查类https://github.com/kephas-software/kephas/blob/master/src/Kephas.Core/Application/PreserveCultureThreadContextAppLifecycleBehavior.cs,该类添加了文化保留行为。通常,您可以在AppLifecycleBehavior
方法的BeforeAppInitializeAsync
中实现此功能。