在Kephas中调用异步函数时,PreserveThreadContext()是什么?

时间:2019-04-16 09:47:13

标签: async-await kephas

我在所有Kephas示例中都注意到,调用异步方法时,最后会调用PreserveThreadContext()。这是做什么的?

一些例子:

   var result = await dataContext.Query<Document>()
                                 .ToListAsync()
                                 .PreserveThreadContext();

我了解ConfigureAwait(false),这有点相似吗?

1 个答案:

答案 0 :(得分:1)

从某种意义上讲,是的,这意味着在服务器环境中它还包括对ConfigureAwait(false)的调用。但是,从异步调用返回后,它还恢复了线程绑定的区域性(和UI文化),因此可以以一致的方式对字符串进行本地化。这是由于您可能会在返回时发现自己处于另一个线程中,在这里,区域性是默认区域性,而不是配置的区域性。 另外,您可以添加自己的行为来存储/恢复其他线程绑定信息。 为此,请检查类https://github.com/kephas-software/kephas/blob/master/src/Kephas.Core/Application/PreserveCultureThreadContextAppLifecycleBehavior.cs,该类添加了文化保留行为。通常,您可以在AppLifecycleBehavior方法的BeforeAppInitializeAsync中实现此功能。