Jscex使用问题

11 views
Skip to first unread message

Sean Zhang

unread,
Jun 27, 2012, 10:16:16 PM6/27/12
to js...@googlegroups.com

老赵,

 

                你好,我在实际使用jscex的时候遇到这样一个问题:

--------------------------------------------------------------------------------------------------

            var Task = Jscex.Async.Task;

            var printAsync = eval(Jscex.compile("async", function (text) {

                var i = 0;

                while (i < 100) {

                    $await(Jscex.Async.sleep(1000)); // “暂停一秒

                    Log(i++);

                }

                return i;

            }));

 

            // 得到Jscex.Async.Task对象

            var task = printAsync("Hello World");

            //task.start(); // 输出“Hello World”

            Task.whenAll(task.start());

            Log("Finished");

 

---------------------------------------------------------------------

按照我的理解是: Task.whenAll(task.start()); 在这个地方应该是等待async方法执行完毕了,才会顺序向下走。但是现在的问题是, Task.whenAll在这个地方好像没有起任何作用,完全不等待,直接就往下走了,是不是我那个地方代码写的不对?

当然我不想把Task.whenAll放在jscex.compile里面,放在这个里面是可以wait的。

 

 

谢谢

张勇

 

Jeffrey Zhao

unread,
Jun 27, 2012, 10:55:46 PM6/27/12
to js...@googlegroups.com
Task.whenAll只是把一堆Task变成一个Task,不提供任何“等待”作用,也没法提供。
 
记得你有C#经验那我用C#打个比方,Task.whenAll就等于.NET 4.5里的Task.WhenAll,需要等待,只能放在C#的async方法里用await关键字等待,就好比在Jscex里用eval(Jscex.compile())一样。
 
外面没法等待的。
 

Sean Zhang

unread,
Jun 28, 2012, 1:07:12 AM6/28/12
to js...@googlegroups.com

谢谢, 我明白!我想找的是c#下面的Task.WaitAll(*)的功能。你下面已经解释的很清楚了,但是我觉得如果能实现外面的WaitAll()功能的话,会更加灵活和强大。

 

张勇

Jeffrey Zhao

unread,
Jun 28, 2012, 2:10:53 AM6/28/12
to js...@googlegroups.com
WaitAll在.NET里是阻塞当前线程的操作,在JavaScript没法也不应该阻塞,因为JavaScript是单线程的,阻塞了之后整个程序就停止了。
 
这也是为什么JavaScript为什么异步这么引人关注,因为JavaScript只能异步。
Reply all
Reply to author
Forward
0 new messages