2012-01-27 5 views
5

ためTaskSchedulerを指定しますデフォルト:は、明示的に、私は暗黙のスケジューリングを使用して、以下の方法を持っている暗黙のうちに予定方式

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

どうすればよいですか?それは本当に簡単な質問のようですが、私は完全な精神的なブロックを持っています!

注:私は承知している例では、実際にはコンパイルされません:)

答えて

7

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

TaskScheduler taskScheduler = new LowPriorityTaskScheduler(); 
TaskFactory taskFactory = new TaskFactory(taskScheduler); 
... 
await taskFactory.StartNew(FooAsync); 
+0

あなたがのawaitからのリターンを得るために必要がある場合は、あなたもそれをアンラップする必要があり、つまりはtaskFactory.StartNew(FooAsync).Unwrapを待ちます。 – VoteCoffee

+0

'LowPriorityTaskScheduler'のコードやリファレンスを追加できますか? – xmedeko

+0

@xmedeko: 'LowPriorityTaskScheduler'は私のものではなく、オペアンプのタイプです。 –

-1

あなたは、スレッドの優先順位を設定することができますが、スレッドのメソッド内:ThreadPriority

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

チェック他の値列挙型。

関連する問題