我一直要求实现这样的:切换同步和异步行为
public async Task<IHttpActionResult> Get(bool sync)
{
if(sync)
{
...sync behavior
} else
{
...async behavior
}
}
现在,我明白的同步/异步行为和线程的基本知识,并很担心的事情这可能会出错(异步代码同步运行,线程阻塞,返回一个任意的任务来匹配方法签名通常是草率的,等等......),但还不足以说明此代码是一个坏主意。所以,我的问题:这是否总是不好的做法,或者有没有可能的情况下呢?
由于各种原因,最好有2种不同的方法。如果没有别的办法,异步方法的命名约定通常是添加'Async'后缀,'GetAsync(sync:false)'看起来很讨厌。此外,当您通过非同步路径时,不需要等待。呃,感觉很可怕。 – DavidG
这是我的确切答案和反应,谢谢!我的职业情况稍微复杂一些,因为我是移动团队(和初级)的唯一API开发者,需要能够告诉我的高级团队领导,足够明确,“不,这不起作用。“,特别是为什么。 – dylanthelion
实际上是否存在同步和异步变化以适应此方法的工作方式,或者您是否被迫伪造一个或另一个(例如,通过“Task.Run”或“.Wait”或“.Result”调用)?在大多数情况下,只有一个或另一个,它应该把它的调用栈上的“同步性”或“异步性”推得比这里更高。 –