【问题标题】:Task.Factory.StartNew() manipulate timings and debug Multiple Tasks execution using TPLTask.Factory.StartNew() 使用 TPL 操作时间和调试多个任务执行
【发布时间】:2012-11-21 04:44:55
【问题描述】:

我想了解如何并行执行一系列函数并能够调试每个函数..

我正在尝试创建一个控制台应用程序,它将(在编译后), 在将通过其任务调度程序执行应用程序的服务器上运行。

    static void Main(string[] args)
    {
        Task.Factory.StartNew(
            // first b. point here (will not "step into")
            () =>
                doFirstOne().ContinueWith(task => doSecondOne())
                ); 
    }

    public static IWebDriver AllDayWbDrvr;
    static string extrctdStr = "";

    public static void doFirstOne()
    { 
           // <<<<<<<----- brakePoint here  nothing steps in
        SeparatedClass.IeEnginGenerator IeNgn = new SeparatedClass.IeEnginGenerator();
         AllDayWbDrvr = IeNgn.ExtractPageContent(firstUrl....);

        var a = AllDayWbDrvr.FindElements(By.Id("anyID"));
        IWebElement IwbElm = IWebDrvRdonlyColl.ElementAt(1).FindElements(By.TagName("td"))[0];
        extrctedStr = IwbElm.Text;
        // plan is to append extracted text to one shared file that will log all results
        string fNm = @"C:\Inetpub\wwwroot\dolarRate.asp";
        File.WriteAllText(fNm, extrctdStr);

        AllDWbDrvr.Close();
        IeNgn.service.Dispose();

    }


    public static void doSecondOne()
    {
        SeparatedClass.IeEnginGenerator IeNgn = new SeparatedClass.IeEnginGenerator();
         AllDayWbDrvr = IeNgn.ExtractPageContent("secondURL....");

        var a = AllDayWbDrvr.FindElements(By.ClassName("WpBody"));
        IWebElement IwbElm = IeNgn.IWebDrvRdonlyColl.ElementAt(5).FindElements(By.TagName("td"))[1];
        extrctedStr = IwbElm.Text;
        string fNm = @"C:\Inetpub\wwwroot\anyOtherFile.asp";
        File.WriteAllText(fNm, extrctdStr);

        AllDWbDrvr.Close();
        IeNgn.service.Dispose();

    }
  1. 这是线程/连接函数的方式吗?
  2. 如何闯入已执行的 doFirst() 和 doScond() 代码?

【问题讨论】:

  • 你的 main 方法从不等待任务完成,所以它会退出。
  • @IanMercer 所以我可以将 TaskFactory 配置为具有类似 in threads 、 background-true 或其他属性的属性?

标签: debugging c#-4.0 .net-4.0 task-parallel-library


【解决方案1】:

您需要等待任务完成,然后退出 main 来结束您的应用程序。

尝试类似:-

Task.Factory.StartNew(doFirstOne).ContinueWith(task => doSecondOne()).Wait(); 

【讨论】:

  • 那么就可以进入,就像调试选项中的标准执行一样?
  • 不需要回答上面的评论,它按预期工作!谢谢...尽管您的答案中有代码,但现在的问题是,带有wait()的代码..它是否仍会正确使用并行执行(在编译后并且不在调试模式下)说我将添加更多任务对于这段代码(要执行的函数更多),即使我们将 wait() 放在最后,它是否仍会比仅以非并行执行方式调用每个函数更快?。
  • 我的回答中的代码运行速度会比只调用 doFirstOne、doSecondOne 慢。除非您从主线程(启动其他任务)执行并行工作或在主线程本身上执行工作,否则启动任务没有任何好处。您可能想要创建几个任务,然后等待所有任务完成后再退出 main。
  • 感谢您的回复,任务有点重,例如:1)如果Ansewr IS Negative,则转到数据库激活SP从Sqls SP返回答案激活SP进行更新并绘制HtmlTable作为日志文件( html) 2) 第二个任务:获取信息。从网页中提取表格值,提取特定表格单元格数据(innerhtml)将其添加到相同的 Html LogFile ...等'我想稍后会添加更多任务,所以它不是那种顺序类型的操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多