我目前正在创建一个引擎,它会旋转10个新的线程,这将做不同的工作。但是我发现我的解决方案不能并行运行。并行使用任务
public async Task Start(Func<string, Task> action)
{
for (var i = 1; i <= config.threads; i++)
{
consumers.Add(getActionTask(action));
}
await Task.WhenAll(consumers);
}
private Task getActionTask(Func<string, Task> action)
{
return Task.Run(async() =>
{
// Do something that returns a string
String data = "Some string here";
await action(data);
}
}
可以说我运行2个线程,并基于数据将在第一线做Task.Delay(TimeSpan.FromSeconds(30));
第二个线程将打印“Hello”的一个循环。
在延迟结束之前,它永远不会得到打印循环,我的实现出了什么问题?
你可以用延迟和打印语句发布代码吗?顺便说一下,不要将'await action(data)'包装在对Task.Run的调用中,而不是必需的。 'getActionTask'方法应该返回'action(data);' –