1
私は、このコードの間に差がある知っている:なぜ私は、Task.Runで同期非同期関数をラップするよりもAPI非同期関数を使用するほうがいいですか?
var streamWriter = new StreamWriter("something.txt");
streamWriter.WriteAsync("text");
と、この:
var streamWriter = new StreamWriter("something.txt");
Task.Run(()=> streamWriter.Write("text"));
最初のものははるかに理にかなっています。
と異なるシナリオでは、私は結果を待っていたときに、このコード:
var streamReader = new StreamReader("something.txt")
char[] chars = new char[10];
Task<int> task = streamReader.ReadAsync(chars, 0, chars.Length);
//Do something...
int num = await task;
//Do something with num...
はこれよりはるかに理にかなって:
var streamReader = new StreamReader("something.txt")
char[] chars = new char[10];
Task<int> task = Task.Run(()=>streamReader.Read(chars, 0, chars.Length));
//Do something...
int num = await task;
//Do something with num...
私は非同期APIで構築されたの使用であると思います明快さだけでなく、ThreadPool
スレッドを何も理由なく待っているよりも、実際にはThreadPool
スレッドをより効率的に、より効率的に管理します。
それは正しいですか?
これは、典型的な純粋な非同期対同期の非同期質問です。 –
「DoSomethingSomethingAsync」メソッドを実装した人々が問題のドメインを理解していて、実際には良い非同期ストーリーを実装するうえで効果的でした。もう1つの方法は、同期呼び出しを行う明示的なタスクを生成することは、「私はそれらを信頼しません」と言っています。私はあなたがそれらを信頼すべきだと思います。 –
一般的に、非同期メソッドを使用する方がタスクを生成してから、そのタスクで同期メソッドを呼び出すよりも、常に*選択することをお勧めします。ここでも、非同期メソッドを作成した人は、自分が何をしているかを知っていました。 –