c# - 如何实现TPL在1分钟延迟后运行进程?

标签 c# multithreading api task-parallel-library threadpool

我需要针对以下情况提供一些建议。我们有两个 API,比如 API1 和 API2。 API1 调用 API2 中的方法。有时API1无法联系API2。但以前API1如果无法联系到API2,会尝试3次。三次后,如果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 的情况下,父方法会等待子任务完成。

关于c# - 如何实现TPL在1分钟延迟后运行进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19197274/

相关文章:

Java 8 可能的双 Lambda 表达式

java - 可以将 main() 转换为守护线程

android - 在目前不支持的平板电脑上安装 Sip api?

jquery - 使用 youtube api 通过 jQuery 获取 youtube 视频的标题

c# - 制作 Selenium 无需等待元素

c# - 在外部应用程序中设置文本框的文本。 Win32 API

c# - 动态添加 DropDownList

c# - 在 ASP.net 中进行设置的最佳方式

java - 终止应用程序和 ScheduledExecutorService;线

php - php中可以通过SID加载 session 吗?