使用的await我有这样的事情:非CPU密集型任务
private void DoSomething()
{
System.Console.WriteLine("Creating Foo");
Foo result = new Foo();
DoSomethingAsync();
System.Console.WriteLine("Returning Foo");
return result;
}
private async void DoSomethingAsync()
{
// The following task takes a long time, but is not CPU intensive
await TaskEx.Run(() =>
{
// code lives here... removed for this example
});
}
因为我没有太多打CPU,我并不需要一个线程。我可以使用什么而不是Run来避免创建线程?
我可能是完全错误的,但是如果你想做一些异步的事情,你必须有一个单独的线程来完成异步工作。如果将它保留在同一个线程上,则它会阻塞,因此是同步的。 – 2011-01-25 23:44:45
我对异步库的理解是,它使用windows消息泵创建回调并管理代码执行,以便在不实际使用线程的情况下提供线程外观(异步执行)。也就是说,除非您使用任务的“运行”方法,此时您将获得一个线程。运行仅建议用于CPU密集型操作。 Anders Hejlsberg给出的PDC 2010演讲很好地解释了这一点: http://bit.ly/bBGOfV – mbursill 2011-01-25 23:51:12