Mit zwei Aufgaben, die On/Off ausführen, möchte ich eine Liste dieser (Paare) erstellen und sie parallel ausführen. Bedeutung: jeder Task kapselt TaskA und TaskB - und TaskB wartet immer auf TaskA zuerst zu beenden. Also soll ich mit paralleler Ausführung von "set" am Ende von TaskA/TaskBAusführen von Aufgabenpaaren parallel
Aufgabe = {TaskA, TaskB}, {TaskA, TaskB}, {TaskA, TaskB} : diese 3 Sätze von Aufgaben auszuführen, die in parallel
private static async Task TaskA()
{
await Task.Delay(2000);
Console.WriteLine("ended TaskA");
}
private static async Task TaskB()
{
await Task.Delay(2000);
Console.WriteLine("ended TaskB");
}
static void StartTask()
{
Task.Run(() =>
{
TaskA().Wait();
TaskB().Wait();
});
}
Main:
List<Task> tasks = new List<Task>();
int taskCount = 3;
for (var i = 0; i < taskCount; i++)
{
var task = new Task(StartTask);
tasks.Add(task);
}
Parallel.ForEach(tasks, task => task.Start());
Derzeit bin immer ich dieses:
ended TaskA
ended TaskA
ended TaskA
ended TaskB
ended TaskB
ended TaskB
Ich glaube, die ausgegeben werden soll:
ended TaskA
ended TaskB
ended TaskA
ended TaskB
// etc..
Auch dies versucht, aber immer noch dasselbe Problem:
static void StartTask()
{
Task task = TaskA().ContinueWith(x => TaskB().Wait(), TaskContinuationOptions.OnlyOnRanToCompletion);
}
Edit 1:
Parallel.For(1, taskCount, (i, state) =>
{
TaskA().ContinueWith(x => TaskB().Wait(), TaskContinuationOptions.OnlyOnRanToCompletion);
});
Warum nicht einfach TaskB vom Ende des taska laufen? –
Ich tue das, was ich tat – BobSwanson
private statische asynchrone Task TaskA() { erwarten Task.Delay (2000); Console.WriteLine ("beendete TaskA"); TaskB(); } –