async控制其运行的调度程序的任务方法

时间:2015-02-17 18:15:43

标签: c# concurrency async-await

编写async任务方法的典型方法如下:

public async Task<int> LongCalculationAsync(int arg) 
{
     int res = doSomeLongCalculation();
     res += await CallSomeOtherTaskAsync();
     res ++;
     return res;
}

当这样编写时,第一部分(在等待之前)同步执行,然后创建另一个任务并在另一个线程上启动,然后由包含最后两行并运行的任务继续原始背景。

问题是同步部分是在调用者运行的任何调度程序上执行的。但我的问题是,我知道我希望返回的任务使用特定的调度程序运行,即使从UI线程调用该方法也是如此。

async方法本身有没有办法决定上下文?

1 个答案:

答案 0 :(得分:1)

使用Task.Factory.StartNew将工作推送到您想要的任何调度程序。对于默认线程池,请使用Task.Run。这很容易:

await Task.Factory.StartNew(() => doSomeLongCalculation(), ...)