5

暗黙のスケジューリングを使用する次の方法があります。

private async Task FooAsync()
{
   await Something();
   DoAnotherThing();
   await SomethingElse();
   DoOneLastThing();
}

ただし、特定の呼び出しサイトから、デフォルトではなく優先度の低いスケジューラで実行したい:

private async Task BarAsync()
{
   await Task.Factory.StartNew(() => await FooAsync(), 
      ...,
      ...,
      LowPriorityTaskScheduler);
}

どうすればこれを達成できますか? とても単純な質問のように思えますが、私は完全なメンタルブロックを抱えています!

注: この例が実際にはコンパイルされないことは承知しています :)

4

2 に答える 2

7

独自のTaskFactoryインスタンスを作成し、必要なスケジューラで初期化します。StartNew次に、そのインスタンスを呼び出します。

TaskScheduler taskScheduler = new LowPriorityTaskScheduler();
TaskFactory taskFactory = new TaskFactory(taskScheduler);
...
await taskFactory.StartNew(FooAsync);
于 2012-01-27T18:12:07.750 に答える
-1

スレッドの優先度を設定できますが、スレッドのメソッド内では次のようになります。

System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.BelowNormal;

ThreadPriorityenumの他の値を確認してください。

于 2012-01-27T18:05:44.290 に答える