2
A
回答
2
以下代碼將啓動10個任務,並在開始下一個10個任務之前等待它們完成。謹慎的一句話是,10個任務開始的順序不能保證。也就是說,這個例子將阻塞,直到10的設置完成,但是任務1可以在任務0之前開始:
private static void Main()
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < 100; i++)
{
if (i % 10 == 0)
{
Console.WriteLine("Waiting for all tasks to complete");
Task.WaitAll(tasks.ToArray());
Console.WriteLine("All tasks have completed. Continuing...");
tasks.Clear();
}
tasks.Add(Task.Factory.StartNew(TrivialTask, new TaskState(i)));
}
}
public class TaskState
{
public TaskState(int id)
{
TaskId = id;
}
public int TaskId { get; set; }
}
private static void TrivialTask(object state)
{
TaskState taskState = (TaskState) state;
Thread.Sleep(1000);
Console.WriteLine("Task " + taskState.TaskId + " completed");
}
2
Here是一個替代調度程序,它似乎讓您可以手動控制並行度。
2
似乎你可以用TPL完成你的任務。運行任務,等待他們完成與Task.WaitAll(),運行另一堆任務,使用ContinueWith完成後,仍然執行其他代碼,例如,UI線程...閱讀關於它here並查看一些源代碼。在Albahari的網站上有更多關於parallel programming的文章。你可以閱讀它,它非常好寫。
相關問題
- 1. C#線程與阻塞
- 2. 在.Net中阻塞線程
- 3. 阻止阻塞的線程阻塞
- 4. 將線程阻塞轉換爲f中的非線程阻塞#
- 5. 阻塞隊列不阻塞線程?
- 6. MessageBeep線程阻塞
- 7. 阻塞線程 - Java
- 8. 非阻塞線程
- 9. Java線程阻塞
- 10. 中止阻塞線程
- 11. 阻塞線程中斷
- 12. 阻止Tomcat中的線程阻塞
- 13. C#ThreadPool一個線程阻塞其他?
- 14. 在Java中的多線程阻塞
- 15. UI線程被阻塞
- 16. Netty線程被阻塞
- 17. Spring ObjectPooling&線程阻塞
- 18. 隊列阻塞主線程
- 19. 沒有阻塞線程
- 20. ConnectAsync阻塞UI線程
- 21. Java selector.select()阻塞線程?
- 22. Multitheading阻塞工作線程
- 23. SmartThreadPool阻塞UI線程
- 24. MaxDegreeOfParallelism阻塞主線程?
- 25. WebClient.DownloadProgressChanged:Console.WriteLine()是阻塞UI線程
- 26. 線程阻塞問題
- 27. 線程阻塞問題?
- 28. 網狀4.0.15線程阻塞
- 29. Silverlight UI線程阻塞
- 30. 線程阻塞後等待
你真的需要100個線程嗎?聽起來像你想要的是更多的「線程池」,你可以將「任務」分配給... – 2012-03-19 07:49:15
請更準確地解釋你想要做什麼,因爲簡單地說 - 你的問題在邏輯上毫無意義。 – TomTom 2012-03-19 07:52:47
嗨,洪,你是否要求阻止10個線程運行,直到10個其他(特定)線程已經開始? – Tung 2012-03-19 07:53:17