gpt4 book ai didi

c# - 避免 Task 和 Task 的重复方法

转载 作者:太空狗 更新时间:2023-10-29 21:50:13 28 4
gpt4 key购买 nike

我对 Task 有一些逻辑和 Task<T> .有什么办法可以避免重复代码吗?

我当前的代码如下:

public async Task<SocialNetworkUserInfo> GetMe()
{
return await WrapException(() => new SocialNetworkUserInfo());
}

public async Task AuthenticateAsync()
{
await WrapException(() => _facebook.Authenticate());
}

public async Task<T> WrapException<T>(Func<Task<T>> task)
{
try
{
return await task();
}
catch (FacebookNoInternetException ex)
{
throw new NoResponseException(ex.Message, ex, true);
}
catch (FacebookException ex)
{
throw new SocialNetworkException("Social network call failed", ex);
}
}

public async Task WrapException(Func<Task> task)
{
try
{
await task();
}
catch (FacebookNoInternetException ex)
{
throw new NoResponseException(ex.Message, ex, true);
}
catch (FacebookException ex)
{
throw new SocialNetworkException("Social network call failed", ex);
}
}

最佳答案

您可以让 Task 重载调用另一个,并返回一个虚拟值。

public async Task WrapException(Func<Task> task)
{
await WrapException<object>(async () => {
await task();
return null;
});
}

或者,由于此处不需要 async 关键字:

public Task WrapException(Func<Task> task)
{
return WrapException<object>(async () => {
await task();
return null;
});
}

关于c# - 避免 Task 和 Task<T> 的重复方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938411/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com