使用的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