私はeBay Apiで作業しようとしています。リクエスト処理+ハンドリングの再試行で最大18個のスレッド しか必要ありません。可変数のジェネリックパラメータを持つC#メソッド
私はすべてのeBayコマンドを実行するラッパーを作ろうとしています。
問題は、さまざまな種類のパラメータを使用して、eBayにさまざまな種類のリクエストがあることです。そのため、それらをすべてラッパーに送信し、必要な結果を得る方法を理解しようとしています。
これは、これを行うための最良の方法ではないかもしれませんが、これを実装する方法についてはわかりません。
private static SemaphoreSlim sem = new SemaphoreSlim(18);
private static int retryCount = 2;
public static async Task<T> RunTask<T, V>(Func<V, T> ebayAction, V param1)
{
// Wait the semaphore.
await sem.WaitAsync();
int currentRetry = 0;
for (; ;)
{
try
{
// If response failed try again.
return await Task.Run(() => ebayAction(param1));
}
catch (Exception e)
{
currentRetry++;
if (currentRetry >= retryCount)
{
throw e;
}
}
finally
{
sem.Release();
}
}
}
使用例:
async Task<TResult> RunTask<TResult>(Func<TResult> ebayAction)
をそして、あなたは別の方法を持っている場合
RunTask(() => SearchItems(keyword));
としてそれを実行します。
private List<ProductData> SearchItems(string keyword)
{
return EbayApiRequestFactory.Create<EbayFindApiRequest>()
.SetKeyword(keyword)
.SetEntriesLimit(100)
.Execute().Result;
}
List<ProductData> searchProducts = await EbayHandler.RunTask(SearchItems, keyword);
'のFunc ebayAction'、' EbayHandler.RunTask(()=> SearchItems(キーワード)) '。 –
同時リクエストを制限しようとしている場合は、セマフォを持つHttpClientのハンドラを作成しないでください。 – john