我一直要求實現這樣的:切換同步和異步行爲
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」調用)?在大多數情況下,只有一個或另一個,它應該把它的調用棧上的「同步性」或「異步性」推得比這裏更高。 –