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