Tag: parallel.for

Thread.Sleep会妨碍其他线程吗?

这是一个控制台程序,希望10个线程批量启动,等待5秒,然后批量停止。 static void Main(string[] args) { System.Threading.Tasks.Parallel.For(0, 10, (index) => { Action act = (i) => { Console.Write(“start {0} “, i); Thread.Sleep(5000); }; act.BeginInvoke(index, OnTaskComplete, index); }); Console.ReadKey(); } static void OnTaskComplete(IAsyncResult res) { Console.Write(“finish {0} “, res.AsyncState); } 但结果并不是我所期望的,10个线程一个接一个地慢慢开始(大约1秒间隔),甚至一些“完成”在一些“开始”之前出现。 注释掉Thread.Sleep时,所有线程都在flash中开始和结束。 Thread.Sleep会影响其他线程吗? 无论如何要做一个纯粹的空闲时间? / – – – – – – – – – – – […]

Task.Factory.StartNew或Parallel.ForEach用于许多长时间运行的任务?

可能重复: Parallel.ForEach vs Task.Factory.StartNew 我需要在每晚的ThreadPool运行大约1,000个任务(这个数字可能会在未来增长)。 每个任务都执行长时间运行的操作(从Web服务读取数据),并且不是CPU密集型的 。 Async I/O不是此特定用例的选项。 给定IList参数,我需要DoSomething(string x) 。 我试图在以下两个选项之间进行选择: IList tasks = new List(); foreach (var p in parameters) { tasks.Add(Task.Factory.StartNew(() => DoSomething(p), TaskCreationOptions.LongRunning)); } Task.WaitAll(tasks.ToArray()); 要么 Parallel.ForEach(parameters, new ParallelOptions {MaxDegreeOfParallelism = Environment.ProcessorCount*32}, DoSomething); 哪个选项更好,为什么? 注意 : 答案应该包括TaskCreationOptions.LongRunning和MaxDegreeOfParallelism = Environment.ProcessorCount * SomeConstant的用法之间的比较。

我可以使用Parallel.For和sql命令吗?

我有一类范围 public class avl_range { public long start { get; set; } public long end { get; set; } } 如果我使用正常的FOR工作完美,但必须等待每个命令完成,每个查询需要8秒,所以10个查询需要80秒。 在Parallel版本中如果我只打印范围工作完美,但如果尝试执行命令说已经在进行中。 {“一项操作已在进行中。”} 我怎么解决这个问题? var numbers = new List(); using (var conn = new NpgsqlConnection(strConnection)) { conn.Open(); Action forEachLoop = number => //Begin definition of forLoop { // only the console write line works ok […]