我有一段非常难看的代码,它散布在整个项目中。这段代码唯一的区别在于一行中调用了不同的方法。所谓的方法总是返回一个bool
。构建一个通用的c#函数,允许函数作为参数传入
我想重构这个并将其提取到它自己的方法中,并将1个班轮传入此方法(如果可能),从我的理解中我可以使用Func<>
来执行此操作。
这是我正在做的。我试图让事情尽可能明确
public async Task<bool> SomeMethod()
{
//code removed for readability.
//IsCustomerComplete will return a bool
var process = await RepeatableMasterPiece(1, 2, _myRepo.IsCustomerComplete(someParameterRequired));
//do something with process result
return process;
}
private async Task<bool> RepeatableMasterPiece(int param1, int param2, Func<Task<bool>> method)
{
int retry = 0;
bool soapComplete = false;
string soapFault = "just a placeholder for example";
bool blackListStatus = false;
while (!soapComplete && retry <= 1)
{
try
{
if (soapFault != null)
{
//do some stuff with param1 & param2 here
}
if (!soapComplete)
{
return await method.Invoke();
}
}
catch (FaultException ex)
{
soapFault = ex.Message;
retry++;
if (retry > 1)
{
throw ex;
}
}
}
}
从回购
public async Task<bool> IsCustomerComplete(int id)
{
...removed other code here
return true;
}
这是否有道理,我是在正确的轨道上,从例子中,我发现他们只显示Funcs<>
传球在string
或int
,这使得事情看起来很简单。
只是要清楚。 '_myRepo.IsCustomerComplete'返回什么? – Nkosi
它返回一个布尔值。我想要传递给这个函数的每个方法总是返回一个布尔值 –
而你想让这个方法异步执行?我问,因为你的例子不会根据当前提供的信息进行编译。 – Nkosi