请参看 .Net 4.0 中的 PPL,TPL。
使用 Task<T>, TaskFactory 实现。
大哥能给点详细说明吗?
@Launcher: 看不懂能给个演示吗? 感激不尽...
@AdinZ: 我的演示也是 MSDN 上的:http://msdn.microsoft.com/zh-cn/library/vstudio/dd537607.aspx
大哥我能在问你个问题吗?
Task[] tasks = new Task[4];可以添加4个任务
假如我同时运行4个任务。我如何停止其中一个呢?
tasks[0] = Task.Factory.StartNew(() => DoSomeWork(1, token), token); tasks[1] = Task.Factory.StartNew(() => DoSomeWork(1, token), token); tasks[2] = Task.Factory.StartNew(() => DoSomeWork(1, token), token);
只能运行4个。在添加一个就报错。请问如何删除其中一个 在添加一个任务呢?
能加qq帮帮吗? 630555865 感谢感谢。。。。。
@Launcher: 你好 看不懂。。你能给个例子吗?
@AdinZ: 例子来了,我把他的代码复制过来:
static void Main(string[] args) { // create the cancellation token source CancellationTokenSource tokenSource = new CancellationTokenSource(); // create the cancellation token CancellationToken token = tokenSource.Token; // create the task Task task = new Task(() => { for (int i = 0; i < int.MaxValue; i++) { if (token.IsCancellationRequested) { Console.WriteLine("Task cancel detected"); throw new OperationCanceledException(token); } else { Console.WriteLine("Int value {0}", i); } } }, token); // wait for input before we start the task Console.WriteLine("Press enter to start task"); Console.WriteLine("Press enter again to cancel task"); Console.ReadLine(); // start the task task.Start(); // read a line from the console. Console.ReadLine(); // cancel the task Console.WriteLine("Cancelling task"); tokenSource.Cancel(); // wait for input before exiting Console.WriteLine("Main method complete. Press enter to finish."); Console.ReadLine(); }
@Launcher: 我怎么感觉他这是停止全部
tasks[0] = Task.Factory.StartNew(() => DoSomeWork(1, token), token); tasks[1] = Task.Factory.StartNew(() => DoSomeWork(1, token), token); tasks[2] = Task.Factory.StartNew(() => DoSomeWork(1, token), token);
你看我这 是同时运行好几组。 我如何来停止其中一组呢
@AdinZ: 当程序员,一定要学会举一反三,不然你就无法应对需求的变动 ,而需求总是不停变动的:
CancellationTokenSource[] tokenSource = new CancellationTokenSource[4];
CancellationToken[] token = new CancellationToken[] {tokenSource[0].Token,tokenSource[1].Token,tokenSource[2].Token,tokenSource[3].Token}
tasks[0] = Task.Factory.StartNew(() => DoSomeWork(1, token[0]), token[0]);
tasks[1] = Task.Factory.StartNew(() => DoSomeWork(1, token[1]), token[1]);
tasks[2] = Task.Factory.StartNew(() => DoSomeWork(1, token[2]), token[2]);
PS:说实话,我从来没写过使用 Task 的代码。
@Launcher:
谢谢你了 你真是个大号人呢!
CancellationToken[] token = new CancellationToken[]{tokenSource[0].Token,tokenSource[1].Token,tokenSource[2].Token,tokenSource[3].Token}
运行到这里提示 未将对象实例化!
是什么原因啊?
@AdinZ:
CancellationTokenSource[] tokenSource = new CancellationTokenSource[]{new CancellationTokenSource(),
new CancellationTokenSource(),new CancellationTokenSource(),new CancellationTokenSource} ;
@Launcher:
呜呜~~~~
绝望了。。竟然停止不了。。。
我能付费找你帮我做个吗?QQ630555865
@AdinZ: 不能。
有个多线程组件SmartThreadPool
没有暂停和停止呀
@AdinZ: 暂停你指的是怎么个暂停.?线程直接挂起么.?用另一个线程是无法控制当前线程做sleep的吧.?
如果是暂停执行任务,应该是可以的啊.
多线程基本可解决。
给个解决方案呗!