Debugging Task.Factory.StartNew()使用TPL操作计时并调试多个任务的执行

Debugging Task.Factory.StartNew()使用TPL操作计时并调试多个任务的执行,debugging,c#-4.0,.net-4.0,task-parallel-library,Debugging,C# 4.0,.net 4.0,Task Parallel Library,我想了解如何并行执行一系列函数,并能够调试每个函数 我正在尝试创建一个控制台应用程序,它将(在编译之后), 在将通过其任务调度程序执行应用程序的服务器上运行 static void Main(string[] args) { Task.Factory.StartNew( // first b. point here (will not "step into") () => doF

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

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

    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();

    }
static void Main(字符串[]args)
{
Task.Factory.StartNew(
//第一个b.指向此处(不会“进入”)
() =>
doFirstOne().ContinueWith(任务=>doSecondOne())
); 
}
公共静态IWebDriver AllDayWbDrvr;
静态字符串EXTRACTDSTR=“”;
公共静态void doFirstOne()
{ 

//您需要等待任务完成,然后从main退出以结束应用程序

尝试以下方法:-

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

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

尝试以下方法:-

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

您的主方法从不等待任务完成,因此它将退出。@IanMercer,这样我就可以配置TaskFactory,使其具有类似于线程中的属性、背景true或其他属性?您的主方法从不等待任务完成,因此它将退出。@IanMercer,这样我就可以配置TaskFactory,使其具有类似于线程中的属性、背景true或其他东西?那么就有可能进入,如调试选项中的标准执行?无需回答上述注释,它会按预期工作!谢谢…虽然回答中有代码,但现在的问题是,带wait()的代码仍然会正确使用并行执行吗(编译后,不在调试模式下运行)假设我将向这段代码中添加更多的任务(要执行的函数更多),那么它的执行速度是否仍然比只调用非并行执行的每个任务快,即使我们将wait()放在在结尾?。我的答案中的代码运行速度将比只调用doFirstOne、doSecondOne慢。除非您从main中有并行工作要做(启动其他任务)或者在主线程本身上要做的工作启动任务没有任何好处。您可能希望创建多个任务,然后在退出主线程之前等待所有任务完成。感谢您的回复,任务有点重,例如:1)转到数据库激活SP从Sqls SP返回应答如果Ansewr为负激活SP进行更新并将HtmlTable绘制为日志文件(html)2)第二个任务:获取信息。从网页提取表格值,提取特定表格单元格数据(innerhtml)将其添加到同一个Html日志文件中…等'我想以后会添加更多任务,因此它不是顺序类型的操作,因此可以单步执行,如调试选项中的标准执行?无需回答上述注释,它会按预期工作!谢谢…尽管您的答案中有代码,但现在的问题是,该代码带有wait()…它是否仍能正确使用并行执行(编译后,而不是在调试模式下),比如说,我将向这段代码中添加更多的任务(要执行的函数更多),它的执行速度是否仍比只调用非并行执行的每一个任务快,即使我们将wait()在结尾?。我的答案中的代码运行速度将比只调用doFirstOne、doSecondOne慢。除非您从main中有并行工作要做(启动其他任务)或者在主线程本身上要做的工作启动任务没有任何好处。您可能希望创建多个任务,然后在退出主线程之前等待所有任务完成。感谢您的回复,任务有点繁重,例如:1)转到数据库激活SP从Sqls SP返回答案如果Ansewr为负,则激活SP for Update和draw HtmlTable To sotre as Log file(html)2)第二个任务:获取信息。从网页中提取表值,提取特定的表单元格数据(innerhtml)将其添加到同一个html日志文件中……等等‘我想以后会添加更多任务,因此这不是连续的操作类型