在this question我问过如何制作一个实用的方法我使用等待。我的问题的答案是:
public async Task<TResult> TryAsync<TResult>(Func<IDataServices, Task<TResult>> method)
{
using (IDataServices client = GetClient())
{
return await method(client);
}
}
以上称为:
Model m = await ClientResolver.TryAsync(async x => await x.GetModelByIDAsync(modelID));
只看这个装置让我想知道它是如何有效的。我在这里等待三次,以免自己编写使用声明的麻烦。有没有更好的方法,也许通过IAwaitable?我经常使用这个结构,所以我认为一些优化将会有很长的路要走。我在我的应用程序中使用异步等待远远的路上,我真的开始认为尾巴正在摇尾巴。但那是另一天的故事。
答案 0 :(得分:0)
你应该能够逃脱
Model m = await ClientResolver.TryAsync(x => x.GetModelByIDAsync(modelID));
您的TryAsync
方法已包含await
。我想如果你想优化它,你需要对其进行分析并查看问题所在。一种可能的优化可能是在一个类中重用客户端。
您还可以使用ConfigureAwait(false)
中的TryAsync
来避免切换到主要上下文,这可能有所帮助,但性能提升非常小。
public async Task<TResult> TryAsync<TResult>(Func<IDataServices, Task<TResult>> method)
{
using (IDataServices client = GetClient())
{
return await method(client).ConfigureAwait(false);
}
}