2016-12-14 28 views
2

Task型の引数をここには表示されない関数に渡す必要があります。関数内でこのタスクは非同期で実行されます。これらの三つの方法の違いは、それをそこに渡す場合:Task.RunとInvoke()の違い

1.

Task.Run((Func<Task>)(async() => Foo = await OperateAsync(id))) 

2.

Task.Run(async() => Foo = await OperateAsync(id)) 

3.

((Func<Task>)(async() => Foo = await OperateAsync(id))).Invoke() 

答えて

3

はい。

Task.Runのオーバーロードが呼び出される1と2が異なります。後者は結果を通過します。

スレッドプールへの1と2の力OperateAsync、3はありません。これは他の詳細によっては非常に見える場合があります。たとえば、デスクトップアプリケーションでOperateAsyncがUI要素へのアクセスを終了した場合は、Task.Runを使用して呼び出すことはできません。

+0

パフォーマンス面では第2のアプローチよりも優れていますか? – AsValeO

+1

@AsValeO同じである必要があります。もしどちらかがかなり速くなれば、それはもう一方の機会に欠けていると思います。デリゲートの建設のために頼んでいた場合、それは第2のものにも暗黙のうちに起こることに留意してください。 – hvd

関連する問題