另外,你还可以简化下 foo()修改成async Task<int> foo(int seed) { ... return i; }调用: int result = await foo(seed);
贴一下对照的.net4.0写法(console的)吧:using System; using System.Linq; using System.Threading;namespace ConsoleApplication1 { class Program { public delegate string myString(); static void Main(string[] args) { ThreadPool.QueueUserWorkItem(h => { var query = from x in Enumerable.Range(0, 10).AsParallel() select x + "->" + foo(unchecked((int)(DateTime.Now.Ticks >> x))); Console.WriteLine("Result is: {0}.", string.Join(", ", query.ToArray())); }); Console.ReadKey(); } private static int foo(int seed) { Random r = new Random(seed); string s = ""; int i = 0; while (s != "this") { char c1 = (char)r.Next(67, 122); char c2 = (char)r.Next(67, 122); char c3 = (char)r.Next(67, 122); char c4 = (char)r.Next(67, 122); s = new string(new char[] { c1, c2, c3, c4 }); i++; } return i; } }}
好文要顶啊。强大的wpf,还有4.0 啊
using System; using System.Linq; using System.Threading;namespace ConsoleApplication1 { class Program { public delegate string myString(); static void Main(string[] args) { ThreadPool.QueueUserWorkItem(h => { var query = from x in Enumerable.Range(0, 10).AsParallel() select x + "->" + foo(unchecked((int)(DateTime.Now.Ticks >> x))); Console.WriteLine("Result is: {0}.", string.Join(", ", query.ToArray())); }); Console.ReadKey(); } private static int foo(int seed) { Random r = new Random(seed); string s = ""; int i = 0; while (s != "this") { char c1 = (char)r.Next(67, 122); char c2 = (char)r.Next(67, 122); char c3 = (char)r.Next(67, 122); char c4 = (char)r.Next(67, 122); s = new string(new char[] { c1, c2, c3, c4 }); i++; } return i; } }}
回头找找。
比如说,在Async CTP里面,那些 xxxAsync() 的方法都是靠扩展方法实现的,而在 VS11DP 里面,这些都被对应的库内置。再比如,在Async CTP里面,WaitAll() 在 TaskEx 类中,而在 VS11DP里面,也被移到了 Task 中。
这个例子里是调用了1次方法。如果只调用一次 那个task[]怎么给?
如果只调用1次,是这样的。int result = await Task.Factory.StartNew(() => foo(seed));
太感谢了英文不好 嘿嘿手头还没有文档。下载的WIN8 64位带的阉割版VS11。所以很多东西都靠猜测,刚刚还跟WaitAny较劲来着。谢谢了啊
不过就是一直没有好的文档,这样不可能和Java竞争的。
另外,你还可以简化下 foo()修改成async Task<int> foo(int seed)
{
...
return i;
}调用:
int result = await foo(seed);
using System.Linq;
using System.Threading;namespace ConsoleApplication1
{
class Program
{
public delegate string myString(); static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(h =>
{
var query = from x in Enumerable.Range(0, 10).AsParallel()
select x + "->" + foo(unchecked((int)(DateTime.Now.Ticks >> x)));
Console.WriteLine("Result is: {0}.", string.Join(", ", query.ToArray()));
});
Console.ReadKey();
} private static int foo(int seed)
{
Random r = new Random(seed);
string s = "";
int i = 0;
while (s != "this")
{
char c1 = (char)r.Next(67, 122);
char c2 = (char)r.Next(67, 122);
char c3 = (char)r.Next(67, 122);
char c4 = (char)r.Next(67, 122);
s = new string(new char[] { c1, c2, c3, c4 });
i++;
}
return i;
}
}}
using System.Linq;
using System.Threading;namespace ConsoleApplication1
{
class Program
{
public delegate string myString(); static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(h =>
{
var query = from x in Enumerable.Range(0, 10).AsParallel()
select x + "->" + foo(unchecked((int)(DateTime.Now.Ticks >> x)));
Console.WriteLine("Result is: {0}.", string.Join(", ", query.ToArray()));
});
Console.ReadKey();
} private static int foo(int seed)
{
Random r = new Random(seed);
string s = "";
int i = 0;
while (s != "this")
{
char c1 = (char)r.Next(67, 122);
char c2 = (char)r.Next(67, 122);
char c3 = (char)r.Next(67, 122);
char c4 = (char)r.Next(67, 122);
s = new string(new char[] { c1, c2, c3, c4 });
i++;
}
return i;
}
}}
如果我没理解错的话,个人认为,main不应该被标记成async.......