ためのawaitを使用して、私はこのようなものがあります:非CPU集約的なタスク
private void DoSomething()
{
System.Console.WriteLine("Creating Foo");
Foo result = new Foo();
DoSomethingAsync();
System.Console.WriteLine("Returning Foo");
return result;
}
private async void DoSomethingAsync()
{
// The following task takes a long time, but is not CPU intensive
await TaskEx.Run(() =>
{
// code lives here... removed for this example
});
}
私は多くのCPUをヒットしていないので、私はスレッドを必要としませんが。スレッドの作成を避けるために、実行の代わりに何を使用できますか?
私は完全に間違っている可能性がありますが、非同期の処理を行う場合は、その処理を非同期で行うために別のスレッドを用意する必要があります。同じスレッド上に置くとブロックされ、同期します。 –
Asyncライブラリについて私が理解したのは、Windowsメッセージポンプを使ってコールバックを作成し、実際にスレッドを使わずにスレッドの外観(非同期実行)を与えるような方法でコードの実行を管理することでした。つまり、タスクの「実行」メソッドを使用しない限り、スレッドが取得されます。実行は、CPUを集中的に使用する場合にのみ推奨されます。 Anders Hejlsbergさんが提供したPDC 2010の講演では、これがうまく説明されています: http://bit.ly/bBGOfV – mbursill
TaskEx.Run()でコードを抽出し、そのメソッドでawaitステートメントを呼び出すのはなぜですか? – Rob