action.BeginInvoke执行后不是期望的
- C# code
public class DoActions { public void Doing(int i) { Thread.Sleep(4000); Console.WriteLine(i.ToString()); } } static void Main(string[] args) { for (int i = 0; i < 10; i++) { //create a Job object DoActions objJob = new DoActions(); Action action = new Action(delegate() { objJob.Doing(i); }); action.BeginInvoke(null, null); } Console.WriteLine("Loop over."); Console.ReadKey(); return;}
输出并不是期望的0,1,2,3。。。
实际上是10,10,10。。。。。
忘前辈指点。
[解决办法]
BeginInvoke是异步执行,当前线程立刻返回。要想达到效果可以试一下action.Invoke()。更好地做法是把循环放到Doing中,action.BeginInvoke异步执行Doing方法,执行结束后回调执行Console.WriteLine("Loop over.")
[解决办法]
BeginInvoke 是异步的,不会在for循环中等待,Thread.Sleep(4000);4秒,for循环早完了