我怎样才能简化这个方法

本文关键字:方法 | 更新日期: 2024-09-20 22:44:55

在这个问题中,我问如何使我使用的实用程序方法可用。我的问题的答案是:

    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?我经常使用这个结构,所以我认为一点优化会有很大的帮助。我在我的应用程序中使用异步等待已经走得很远了,我真的开始觉得尾巴在摇狗。但这是另一天的故事。

我怎样才能简化这个方法

您应该可以只使用

Model m = await ClientResolver.TryAsync(x => x.GetModelByIDAsync(modelID));

你的TryAsync方法已经有了await。我认为如果你想优化它,你需要对它进行分析,看看问题在哪里。一种可能的优化可能是跨类重用客户端。

您还可以通过在TryAsync中使用ConfigureAwait(false)来避免切换到主上下文,这可能会有所帮助,但性能增益非常小。

public async Task<TResult> TryAsync<TResult>(Func<IDataServices, Task<TResult>> method)
{
    using (IDataServices client = GetClient())
    {
        return await method(client).ConfigureAwait(false);
    }
}