C# 关于运行多任务&;完成后报告

C# 关于运行多任务&;完成后报告,c#,task-parallel-library,C#,Task Parallel Library,我正在寻找一条出路,运行多个任务,不按顺序报告任务状态。 在这里,我粘贴了一个代码,其中多个任务运行并在所有任务完成时报告 var task1 = Task.Factory.StartNew(() => { Thread.Sleep(1000); return "dummy value 1"; }); var task2 = Task.Factory.S

我正在寻找一条出路,运行多个任务,不按顺序报告任务状态。 在这里,我粘贴了一个代码,其中多个任务运行并在所有任务完成时报告

var task1 = Task.Factory.StartNew(() =>
            {
                Thread.Sleep(1000);
                return "dummy value 1";
            });

            var task2 = Task.Factory.StartNew(() =>
            {
                Thread.Sleep(13000);
                return "dummy value 2";
            });

            var task3 = Task.Factory.StartNew(() =>
            {
                Thread.Sleep(2000);
                return "dummy value 3";
            });

            Task.Factory.ContinueWhenAll(new[] { task1, task2, task3 }, tasks =>
            {
                foreach (Task<string> task in tasks)
                {
                    Console.WriteLine(task.Result);
                }
            });
            Console.ReadLine();

一个简单的解决方案是继续执行每项任务。这是一个快速而肮脏的例子:

var taskp = Task.Factory.StartNew(() =>
{
    var task1 = Task.Factory.StartNew(() =>
    {
        Thread.Sleep(1000);
        return "dummy value 1";
    }).ContinueWith((continuation) => { Console.WriteLine("task1"); });

    var task2 = Task.Factory.StartNew(() =>
    {
        Thread.Sleep(3000);
        return "dummy value 2";
    }).ContinueWith((continuation) => { Console.WriteLine("task2"); });

    var task3 = Task.Factory.StartNew(() =>
    {
        Thread.Sleep(2000);
        return "dummy value 3";
    }).ContinueWith((continuation) => { Console.WriteLine("task3"); });

    Task.Factory.ContinueWhenAll(new Task[] { task1, task2, task3}, (x) => { Console.WriteLine("Main Task Complete"); });
});            
代码被更新以适应OP的更新,其中包含一个“主”任务,该任务将在所有“内部”任务完成后输出。要使其如此
taskp
返回字符串而不是写入字符串,代码变为

var taskp = Task.Factory.StartNew<string>(() =>
{
    var task1 = ...; //same
    var task2 = ...; //same
    var task3 = ...; //same
    return "Main Task Complete";

}).ContinueWith((x)=> Console.WriteLine(x.Result));
var taskp=Task.Factory.StartNew(()=>
{
var task1=…;//相同
var task2=…;//相同
var task3=…;//相同
返回“主任务完成”;
}).ContinueWith((x)=>Console.WriteLine(x.Result));

必须使用
StartNew
重载指定
任务的返回类型
,以获得
结果

i位更改您的代码,但此行给出错误。})。继续((x)=>x.Result);错误是“不包含‘结果’的定义”,我在这里更新了我的代码…请查看并指导我在哪里犯了错误?
var taskp = Task.Factory.StartNew<string>(() =>
{
    var task1 = ...; //same
    var task2 = ...; //same
    var task3 = ...; //same
    return "Main Task Complete";

}).ContinueWith((x)=> Console.WriteLine(x.Result));