2017-09-27 16 views
0

私はVisual StudioでC#コードを書いています。私は次のような非同期タスク方式で待望のタスクを返す関数を持っている:タスク非同期のC#プログラミング

私はDoSomething()方法の(以下に)2つの可能な実装を書きました。これら2つの実装の違いは何ですか?それぞれの利点および/または欠点は何ですか?

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

async Task DoSomething() 
{ 
    // Some code 
} 

ありがとうございます!

+0

[タスククラス](https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v = vs.110).aspx) [Task.Runメソッド(アクション)] (https://msdn.microsoft.com/en-us/library/hh195051(v=vs.110).aspx) [Async in C#5]を読むことをお勧めします。 0](http://shop.oreilly.com/product/0636920026532.do) – rmjoia

+0

[C#で "return await"の目的は何ですか?](https://stackoverflow.com/questions/19098143/) – Console

+1

[非同期メソッドの呼び出しと非同期メソッドのTask.Runの呼び出しの違い]の可能な複製(https://stackoverflow.com/questions/31958146/)非同期メソッド呼び出しと非同期メソッド呼び出しの違い) –

答えて

1

asyncは実際にはあなたのメソッド内にawaitを使用することを意味します。そうする計画がない場合は、asyncキーワードなしのタスクを返すことができます。

いずれの場合でも、呼び出し元のメソッドを待つことができます。

しかし、2番目のシナリオでは、正しく答えることが難しいとはかなり不明です。

+0

複数の 'await'が複数の状態マシン(シーンの裏側)を作成し、タスク 'は直接そうしません。パフォーマンス上の配慮が必要かもしれません。 –

0

オプション1は、バックグラウンドでCPUバインドされた作業用です。

オプション2は、非同期作業のためのものです。つまり、await他のTask - 返送メソッドを伴うものです。

0

asyncキーワードあなたがawait他のタスクにあなたのコード内でawaitキーワードを使用することができますが(async/awaitを参照)

Task.Run(...)は(Task.Run Methodを参照)のThreadPoolからスレッドによって実行されるようにコードをスケジュールします