我需要以下情况的一些建议。我们有两个API,比如说API1和API2。 API1从API2调用方法。有时API1无法联系API2。但是如果无法联系API2,API1会尝试三次。三遍后,如果API1无法与API2联系,我们决定增加1分钟的延迟,然后重试。 API1不应依赖此1分钟的延迟处理结果。它应该向用户返回响应,例如“请检查电子邮件以获取结果”。为此,我们尝试了
TPL(任务并行库)
使用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
}
最佳答案
要运行独立于父方法的子任务,我们可以使用Task类。
public string TestTPL() //parent method
{
Task task = new Task(DoSomeWork); //child task
task.Start();
return "Hey, I came";
}
任务可以获取自己的专用线程,而不会占用池中的线程。
如果是Parallel.Invoke,则父方法将等待子任务完成。