任务和如何正确使用它们C#

问题描述 投票:2回答:1

我目前在一些项目中使用任务,我想知道如何才能真正的用同一个方法多次运行一个并行代码.这是我的代码。

Task CPU1 = new Task(CPU1_DoWork);
Task CPU2 = new Task(CPU2_DoWork);

// And i wanted to execute the CPU1 Task multiple time here is how i used it:
while (Timer_General.IsRunning == true)
{
    if (CPU1.Status != TaskStatus.Running)
    {
        CPU1.Start(); 
    }
    if (CPU2.Status != TaskStatus.Running)
    {
        CPU2.Start(); 
    }
}

// Other Blabla

他为什么要运行 CPU1_DoWork 只有一次?谢谢大家的帮助! :)

我添加了CPU2序列,因为如果我们等待第一个序列,第二个序列将不会被调用:所以这带来了一个问题。有没有其他方法可以让我的Tasks在同一时间运行多次?

c# asynchronous task-parallel-library
1个回答
4
投票

A Task 不能重复使用。对于每一个你想要使用的,你都需要创建一个新的实例。而不是使用 Task你应该使用内置的工厂方法 Task.Run 这将为你返回一个热门任务。

public async Task FooAsync()
{
    while (Timer_General.IsRunning)
    {
        await Task.Run(CPU1_DoWork);
    }
}

当你在检查 Task.IsRunning我假设你想异步等待每个任务的完成,因此我添加了 await 关键字

编辑。

由于你添加了第二个任务并且希望它们并行运行,你可以使用 Task.WhenAll:

public async Task FooAsync()
{
    while (Timer_General.IsRunning)
    {
        await Task.WhenAll(Task.Run(CPU1_DoWork), 
                           Task.Run(CPU2_Work));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.