プロジェクト全体に散らばっている非常に醜いコードがあります。このコードの唯一の違いは、異なるメソッドが呼び出される1行です。呼び出されるメソッドは常にbool
を返します。関数をパラメータとして渡すことができる一般的なC#関数を構築する
これをリファクタリングして独自のメソッドに抽出し、このメソッドに(可能であれば)1ライナーを渡したいと思っています。これを行うにはFunc<>
を使用します。
ここに私がやろうとしていることがあります。私は、彼らが唯一のFuncs<>
通過を示して発見した例から、正しい軌道に乗っています、レポ
public async Task<bool> IsCustomerComplete(int id)
{
...removed other code here
return true;
}
このメイクセンスをいから
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;
}
}
}
}
できるだけ明確なものを維持しようとしましたstring
またはint
のように表示されます。
'_myRepo.IsCustomerComplete'は何を返しますか? – Nkosi
boolを返します。私がこの関数に渡したいすべてのメソッドは常にboolを返します –
そして、そのメソッドを非同期で実行したいですか?あなたの例は、現在提供されている情報に基づいてコンパイルされないからです。 – Nkosi