将 Linq 和 .ToList()、.Single() 等作为 func 参数传递给另一个方法是否安全?
我需要使用一些重试策略逻辑来包装一些 Linq 查询。
是否安全
return WithRetry<User>(() =>
dataContext.Users.Where(u => u.UserID == userID).SingleOrDefault());
将 this: 传递给 this:
public TResult WithRetry<TResult>(Func<TResult> methodCall)
{
// My Try/Catch Retry Code
}
,或者第一行应该这样构造:
return WithRetry<User>(() =>
{
return dataContext.Users
.Where(u => u.UserID == userID)
.SingleOrDefault();
});
I needed to wrap some Linq queries with some Retry Policy logic.
Is it safe to pass this:
return WithRetry<User>(() =>
dataContext.Users.Where(u => u.UserID == userID).SingleOrDefault());
to this:
public TResult WithRetry<TResult>(Func<TResult> methodCall)
{
// My Try/Catch Retry Code
}
Or should the first line be constructed like this instead:
return WithRetry<User>(() =>
{
return dataContext.Users
.Where(u => u.UserID == userID)
.SingleOrDefault();
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
AFAIK,如果方法的参数类型是
Func
,调用它会自动作为函数传递而不执行它。您不需要将其进一步包装在匿名函数包装器中。AFAIK, if the argument type of a method is
Func
, calling it will automatically pass as a function without executing it. You don't need to further wrap it in an anonymous function wrapper.不需要匿名包装器。直接传递lambda表达式函数调用即可。
The anonymous wrapper is not needed. Just pass the lambda expression function call directly.