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

时间:2015-12-27 15:49:45

标签: c# asynchronous task-parallel-library

我目前正在某些项目中使用任务,我想知道如何使用相同的方法多次实际运行并行代码。 这是我的代码:

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序列,因为如果我们等待第一个,第二个将不会被调用:/所以这会造成问题。有没有其他方法可以让我的任务同时运行多次?

1 个答案:

答案 0 :(得分:3)

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