2015-12-27 20 views
2

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

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

+0

任务背后的整点是他们'await'并忘记他们,直到他们完成 –

+0

请原谅我的无知,如果我走了,但可以使用线程来实现这一目标? – Ciara

回答

3

A Task不能重复使用。对于你想使用的每一个你需要创建一个新的实例。除了使用Task的,你应该使用工厂方法Task.Run构建将返回一个热点任务给你:当你正在检查Task.IsRunning

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

,我假设你希望异步等待每个任务完成,因此我添加了await关键字。

编辑:

既然你增加了第二个任务,并希望他们botg并行运行,你可以使用Task.WhenAll

public async Task FooAsync() 
{ 
    while (Timer_General.IsRunning) 
    { 
     await Task.WhenAll(Task.Run(CPU1_DoWork), 
              Task.Run(CPU2_Work)); 
    } 
} 
+0

谢谢youuuu! :d –

相关问题