我需要在以下情況的一些建議。我們有兩個API可以說API1和API2。 API1從API2調用一個方法。有時API1無法聯繫API2。但如果無法聯繫API2,則API1會嘗試三次。三次後,仍然如果API1無法聯繫API2,我們決定增加1分鐘的延遲時間,然後重試。 API1不應該依賴這1分鐘的延遲處理結果。它應該向用戶返回一個響應,例如「請檢查電子郵件的結果」。爲此,我們試圖如何實現第三方物流運行1分鐘後延遲的過程?
TPL(任務並行庫)
在使用第三方物流的API1等待完成任務,然後只返回結果。
線程
我們試圖線程池,但它是老式的。
的.NET Framework 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
}
請出示你已經嘗試了什麼,並註明C#和哪個版本的.NET 4.5你使用。 –
那麼有什麼不工作,爲什麼?順便說一句,你使用Parallel.Invoke是沒有意義的。爲什麼? – usr
只因爲舊事並不意味着它必須是壞的。根據你的具體情況使用最好的東西,不要看它的年齡。 – svick