在 Kephas 中调用异步函数时 PreserveThreadContext() 是什么?
What is PreserveThreadContext() when calling async functions in Kephas?
我注意到在所有 Kephas 示例中,当调用异步方法时,最后会调用 PreserveThreadContext()
。这是做什么的?
一些例子:
var result = await dataContext.Query<Document>()
.ToListAsync()
.PreserveThreadContext();
我知道 ConfigureAwait(false)
,这是相似的吗?
在某种程度上,是的,这意味着在服务器环境中它还包括对 ConfigureAwait(false)
的调用。但它还会在从异步调用返回时恢复线程绑定文化(和 UI 文化),以便可以以一致的方式本地化字符串。这是因为您在返回时可能会发现自己处于另一个线程中,其中文化是默认文化,而不是配置的文化。
此外,您可以为 storing/restoring 其他线程绑定信息添加自己的行为。
为此检查 class https://github.com/kephas-software/kephas/blob/master/src/Kephas.Core/Application/PreserveCultureThreadContextAppLifecycleBehavior.cs,它添加了文化保存行为。通常,您会在 AppLifecycleBehavior
中的 BeforeAppInitializeAsync
方法中实现它。
我注意到在所有 Kephas 示例中,当调用异步方法时,最后会调用 PreserveThreadContext()
。这是做什么的?
一些例子:
var result = await dataContext.Query<Document>()
.ToListAsync()
.PreserveThreadContext();
我知道 ConfigureAwait(false)
,这是相似的吗?
在某种程度上,是的,这意味着在服务器环境中它还包括对 ConfigureAwait(false)
的调用。但它还会在从异步调用返回时恢复线程绑定文化(和 UI 文化),以便可以以一致的方式本地化字符串。这是因为您在返回时可能会发现自己处于另一个线程中,其中文化是默认文化,而不是配置的文化。
此外,您可以为 storing/restoring 其他线程绑定信息添加自己的行为。
为此检查 class https://github.com/kephas-software/kephas/blob/master/src/Kephas.Core/Application/PreserveCultureThreadContextAppLifecycleBehavior.cs,它添加了文化保存行为。通常,您会在 AppLifecycleBehavior
中的 BeforeAppInitializeAsync
方法中实现它。