我被要求实施这样的事情:
public async Task<IHttpActionResult> Get(bool sync)
{
if(sync)
{
...sync behavior
} else
{
...async behavior
}
}
现在,我了解同步/异步行为和线程的基础知识,并且担心可能出错的事情(异步代码同步运行,线程阻塞,返回任意任务以匹配方法签名通常很邋等,等等...),但还不足以确定这段代码是个坏主意。所以,我的问题是:这总是不好的做法,还是有可能没事的情况?
答案 0 :(得分:0)
异步方法将同步运行,直到它们到达await
。如果await
正在等待结果,则返回控件。
因此,只要异步路径使用等待,您的代码就没有问题。
但重要的是要注意,那就是异步方法不必等待任何长时间运行的操作,它将同步执行!因此,即使您使用等待,也无法保证控制权被回馈。