2015-12-27 31 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 –

相關問題