我需要一些关于以下情况的建议。我们有两个 API,比如说 API1 和 API2。API1 从 API2 调用一个方法。有时 API1 无法联系 API2。但是 API1 曾经尝试过 3 次,如果它无法联系到 API2。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
}