【发布时间】:2020-02-25 09:03:25
【问题描述】:
我在 .net 核心中为 IStringLocalizer 使用自定义存储,它具有异步方法来获取资源。 我想让它一直异步。 这是sn-p:
public class CustomStringLocalizer : IStringLocalizer
{
public LocalizedString this [string name]
{
get
{
var culture = CultureInfo.CurrentUICulture;
Task<string> translation = _customStorage.GetResource(culture, key, name).Result; //can't make it 'await'
return new LocalizedString (name, translation, translation != null);
}
}
}
如何使属性异步,以便可以将 await 用于此方法? 从任务中获取结果也会出现错误:发生了一个或多个错误。 (类型'Task`1'必须是可序列化的)
【问题讨论】:
-
Task<string> translation = _customStorage.GetResource(culture, key, name).Result;看起来这个方法的返回类型是Task<Task<string>>这对我来说似乎是一个错误。 -
目前,它不起作用,所以问题是如何摆脱从任务中获取“结果”
-
"如何摆脱从任务中获取"结果""我不太明白这个问题。我也不知道
_customStorage的接口或实现。 -
它返回 Task
... 摆脱意味着我不想调用任务的结果,因为它消除了整个异步想法。 -
如果不使用 .Result 或 .GetAwaiter().GetResult() (这些或多或少相等),您将无法在非异步上下文中使用异步调用。简直没有办法。您要么使 .GetResource(...) 同步,要么使用 .Result。也许您可以在启动时预加载这些值,这样您就不必每次都调用 .GetResource(...) 了?
标签: asp.net-core asynchronous async-await localization asp.net-core-localization