2017-09-27 106 views
0

我正在用Visual Studio編寫C#代碼。我有如下所示的異步任務方法等待一個任務返回函數:任務異步c#編程

我寫DoSomething()方法的兩個可能的實施方式(下面提供)。這兩種實現有什麼區別?每個人的優點和/或缺點是什麼?

Task DoSomething() 
{ 
    return Task.Run(() => { // Some code }); 
} 

async Task DoSomething() 
{ 
    // Some code 
} 

預先感謝您!

+0

[Task Class](https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v = vs.110).aspx) [Task.Run Method(Action)] (https://msdn.microsoft.com/en-us/library/hh195051(v=vs.110).aspx) 我會推薦閱讀[C#5中的異步。 0](http://shop.oreilly.com/product/0636920026532.do) – rmjoia

+0

[C#中「返回await」的目的是什麼?](https://stackoverflow.com/questions/19098143/)什麼是返回等待在c) – Console

+1

可能重複[調用異步方法和Task.Run異步方法之間的區別](https://stackoverflow.com/questions/31958146/差異之間調用異步方法和任務運行異步方法) –

回答

1

async確實意味着您將在您的方法中使用await。如果你沒有這樣做的計劃,那麼你可以返回任務沒有async關鍵字。

在任何情況下,您都可以在呼叫方法上等待。

但是在第二種情況下你很難做出正確回答的問題還不清楚。

+0

還值得一提的是,多個'await's將創建多個狀態機(幕後),同時返回'任務'不會。可能是性能方面的考慮因素。 –

0

選項1用於背景中的CPU綁定工作。

選項2用於異步工作,即涉及其他Task返回方法。

0

async關鍵字將能在你們使用await關鍵字在你的代碼給其他await任務(見async/await

Task.Run(...)將安排您的代碼從線程池線程執行(見Task.Run Method