编写async
任务方法的典型方法如下:
public async Task<int> LongCalculationAsync(int arg)
{
int res = doSomeLongCalculation();
res += await CallSomeOtherTaskAsync();
res ++;
return res;
}
当这样编写时,第一部分(在等待之前)同步执行,然后创建另一个任务并在另一个线程上启动,然后由包含最后两行并运行的任务继续原始背景。
问题是同步部分是在调用者运行的任何调度程序上执行的。但我的问题是,我知道我希望返回的任务使用特定的调度程序运行,即使从UI线程调用该方法也是如此。
async方法本身有没有办法决定上下文?
答案 0 :(得分:1)
使用Task.Factory.StartNew
将工作推送到您想要的任何调度程序。对于默认线程池,请使用Task.Run
。这很容易:
await Task.Factory.StartNew(() => doSomeLongCalculation(), ...)