1

私はこのようなものを持っています:

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にあまり当たらないので、スレッドはいらないです。スレッドの作成を回避するには、Run の代わりに何を使用できますか?

4

2 に答える 2

1

ここでのタスク非同期パターンの意図を誤解していると思います。あなたがしていることはThreadPool.QueueUserWorkItem、プロセスのプールからワーカースレッドを再利用し、必要な場合にのみ作成することで、おそらくより適切に処理されます。

TAP を使用すると、タスクを段階的に処理できる作業の "チャンク" に分割できますが、"これはバックグラウンド タスクである" ことを直接伝える手段は提供されません。

于 2011-01-25T23:49:00.523 に答える
0

実行しているタスクによって異なります。CPUをあまり使わないとおっしゃっているので、他のイベントを待っているため、タスクに時間がかかると思います。そのため、これらのイベントのコールバックを登録するようにタスクを設計する必要があります。各コールバックはメイン スレッドですばやく完了しますが、待機しているイベントが実際に発生するまでトリガーされません。

于 2011-01-25T23:47:13.537 に答える