var getDtTask = new Task<DataTable>(() => {return QueryFeeControl.QueryAllFeeInfo(); });
var bindTask = getDtTask.ContinueWith((t) =>
{
Parallel.Invoke
(
() => { BindGridView(t.Result); },
() => { ViewState["FeeInfo"] = t.Result; }
);
});
getDtTask.Start();
这段代码Parallel.Invoke中的Action只能执行一个
Parallel.Invoke 函数里面可以传入一个ParallelOptions类型的参数实现对并发的控制,里面有一个属性ParallelOptions可以限制最大并发粒度。
Parallel.Invoke(new ParallelOptions() { MaxDegreeOfParallelism = 2 }, actions);
不过这个最大并发粒度还受到TaskScheduler的参数控制的,默认的TaskScheduler的最大并发数为CPU个数。如果你要实现更多的并发数,可以使用我以前写的一个TaskScheduler:http://www.cnblogs.com/TianFang/archive/2011/10/05/2199526.html
Parallel.Invoke(new ParallelOptions() { TaskScheduler = new SimpleTaskScheduler(10) }, actions);