Mam obiekt, który zwraca System.Threading.Tasks.Task
:Jak równolegle uruchomić listę <Task>?
public class MyClass
{
public Task GetTask(object state, CancellationToken cancellationToken)
{
return new Task(Execute, state, cancellationToken);
}
public void Execute(object context)
{
//do stuff
}
}
indziej mam List<MyClass>
, więc należy wykonać następujące czynności, aby uzyskać List<Task>
:
var myTaskList = myClassList.Select(p => p.GetTask(null, cancellationToken)).ToList();
Teraz mam List<Task>
, w jaki sposób Rozpoczynam je wszystkie równolegle? Czy istnieje bardziej zwięzły sposób kodowania tego?
Dzięki!
Dziękuję, 'Parallel.ForEach()' było tym, czego szukałem. – user833115xxx
'Parallel.ForEach' nadal będzie blokował bieżący wątek, dopóki nie zakończy wszystkich jego iteracji. – davenewza
Masz rację - pytanie było dość niejasne, ale tak też jest z moją odpowiedzią. Prawdziwie równoległym sposobem jest wykonanie (dowolnej) logiki 'task.Start()' w osobnym wątku (tj. Obiekt Thread, zadanie z opcją tworzenia LongRunning, Parallel.Invoke itd.). –