次の状況について何か提案が必要です。API1 と API2 という 2 つの API があります。API1 は API2 からメソッドを呼び出します。API1 が API2 に接続できない場合があります。しかし、API2 に接続できない場合、API1 は 3 回試行していました。3 回後も API1 が API2 に接続できない場合は、1 分間の遅延を追加して再試行することにしました。API1 は、この 1 分間の遅延処理結果に依存してはなりません。「結果についてはメールを確認してください」などの応答をユーザーに返す必要があります。このために、私たちは試しました
TPL(タスク並列ライブラリ)
TPL を使用している間、API1 はタスクの完了を待機し、それからのみ結果を返します。
ねじ切り
スレッドプールを試しましたが、時代遅れです。
.NET フレームワーク 4.0
ここで、API1 のコードは TPL を実装します
public string TestTPL()
{
string str = string.Empty;
int i = 1;
ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
while (i <= 3)
{
//call a method resides in API2
string str = obj.API2Method();
if (string.IsNullOrEmpty(str))
i++;
else
break;
}
if (string.IsNullOrEmpty(str))
Parallel.Invoke(() => DoSomeWork());
return "Hey, I came";
}
public void DoSomeWork()
{
//wait for 1 min
System.Threading.Thread.Sleep(60000);
ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
//call a method resides in API2
string str = obj.API2Method();
//send mail to the user
}