我该如何简化这种方法

时间:2015-03-03 05:38:36

标签: c# async-await

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?我经常使用这个结构,所以我认为一些优化将会有很长的路要走。我在我的应用程序中使用异步等待远远的路上,我真的开始认为尾巴正在摇尾巴。但那是另一天的故事。

1 个答案:

答案 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);
    }
}