考慮這樣的代碼:如果完全異步,我的任務是否長時間運行?
private static async Task ProcessSomethingAsync()
{
while (true)
{
var message = await GetMessageAsync();
await WriteAsync(message);
}
}
考慮到GetMessageAsync和WriteAsync方法槓桿異步IO。
想象一下,我有幾個(從2到N)這樣的任務,只要應用程序存在,它就一直存在。 我認爲,因爲循環內的代碼是完全異步的,所以最好不要在啓動這樣的任務時使用LongRunning選項,以便我們能夠利用ThreadPool而不是爲每個Task創建線程。
這是正確的還是我錯過了什麼?
如果這些方法實際上是異步I/O,而不是CPU綁定,那麼它們可以在一個線程內生活得很好。當然,如果主線程沒有被佔用,但即使這樣,你也可以在另一個線程中執行所有這些。 – Luaan
'GetMessageAsync()'和/或'WriteAsync()'實際上可以同步完成嗎?請記住,如果它們實際上完全同步完成,那麼'await'實際上並不代表該線程實際上將被放棄的時間點。 –
@presiuslitelsnoflek同意,術語異步和長時間運行是正交的,但也許我應該改變問題更具體。 – Max