2016-11-04 53 views
2

msdn您可以使用Task.Run移動CPU綁定工作提高到一個後臺線程

您可以使用Task.Run移動CPU綁定工作提高到一個後臺線程。

我的問題是,有沒有其他的選擇?如果我想使用await關鍵字我必須返回任務,所以我必須使用Task.Run

public static Task<int> LongProcess() 
{ 
    return Task.Run<int>(() => 
    { 
     //Long running 
     return 5; 
    }); 
} 

public async static void CallProcess() 
{ 
    int a = await LongProcess(); 
} 

是不是上面的代碼只用等待的選項?如果不是,你能否請其他選擇?如果我不使用Task.Run,​​爲什麼我需要異步/等待?

+1

http://stackoverflow.com/a/18015586/4767498 –

+0

你可以有效地等待一個任務,你需要以某種方式創建。無論是Task.Run()還是Task.Factory.StartNew(),或者是Task.Start()之後的新Task(),如果您想等待它,您仍然需要一個Task。 – sellotape

+0

[異步不是線程](http://blog.stephencleary.com/2013/11/there-is-no-thread.html)。 –

回答

1

這不是只是 CPU密集型工作。更常見的情況是,您將使用異步/等待I/O工作,否則會在等待文件系統,數據庫或網絡操作完成時鎖定線程。

相關問題