3 回答

TA貢獻1841條經(jīng)驗 獲得超3個贊
請注意,使用async不使用的方法await被認為是不好的樣式。如果你有一個返回任務(wù)的同步方法,你應該使用Task.FromResult:
public Task<bool> DoSomeStuffWithAsync()
{
return Task.FromResult(true);
}
但是,是的,僅此而已:返回任務(wù)的同步方法。它沒有異步,所以它實際上與只返回一個布爾值的普通同步代碼沒有任何不同。
直接返回任務(wù)而不是返回值還有好處嗎?那要看。有時,您可能需要實現(xiàn)一個異步接口,但實際上并沒有異步實現(xiàn)它。但是,如果您不必這樣做,并且您也不考慮最終更改您的實現(xiàn)以實際異步執(zhí)行某些操作,那么讓您的方法返回任務(wù)沒有任何好處。
至于調(diào)用,await DoSomeStuffWithAsync()將運行DoSomeStuffWithAsync()然后等待它返回的任務(wù)。既然DoSomeStuffWithAsync()是同步的,任務(wù)會直接返回,既然任務(wù)已經(jīng)完成,await就可以直接繼續(xù)。所以這與同步調(diào)用方法非常相似。但是,它的存在await確實會對運行時行為產(chǎn)生影響,因為這將使調(diào)用方法實際上是異步的(即使被調(diào)用的代碼是同步的)。
但由您決定這是否適合您的情況。不過,一般來說,當不涉及真正的異步過程時,您可能應該避免讓它看起來是異步的。

TA貢獻1784條經(jīng)驗 獲得超2個贊
簡而言之,async
關(guān)鍵字不會使方法異步運行。它只允許方法在await
里面調(diào)用關(guān)鍵字。這就是魔法發(fā)生的地方。在您的情況下,您在任何地方都沒有任何await
關(guān)鍵字表明您的方法確實沒有異步運行。

TA貢獻1772條經(jīng)驗 獲得超6個贊
你的方法返回不同的東西。DoSomeStuffWithAsync() 返回一個Task<bool>. 您可以在沒有“async”關(guān)鍵字的情況下調(diào)用它 - 同步 - 編譯器將在方法完成后返回包裝在實例中的Task<bool>bool - 它在幕后執(zhí)行此操作。另一個“區(qū)別”是您如何處理返回的值。 .
var task = DoSomeStuffWithAsync(); // Synchronous call
Console.WriteLine(task.Result); // You must unpack the bool result...
您的其他方法只返回一個布爾值 - 它只是一個標準的同步調(diào)用/返回......
var result = DoSomeStuff(); // Synchronous call
Console.WriteLine(result); // Just use the result
從行為的角度來看,要回答您的具體問題,兩者的行為都是同步的。另一種看待它的方式:
var act = new Func<Task<bool>>(async () => await DoSomeStuffWithAsync());
var result = act(); // will complete when DoSomeStuffWithAsync completes
希望這能回答你的問題。
- 3 回答
- 0 關(guān)注
- 214 瀏覽
添加回答
舉報