Dot-Net
等待任務:如果等待後沒有程式碼,則返回任務或等待[重複]
我做了一些閱讀,並認為我已經掌握了關於 System.Threading.Task 的 await 和 async 關鍵字的基礎知識。
但是,我不確定我是否正確解決了一個小問題,並且正在尋找驗證或有人糾正我。
我正在使用這個簽名實現一個非同步方法:
public Task ProcessUploadedFile(FileInfo info, string contentType);顯然,如果我想在方法中等待任何東西,我需要將 async 關鍵字添加到簽名中,
我的問題是:如果我的方法做的最後一件事是呼叫另一個非同步方法,或者返回一個任務,那麼等待它有什麼意義嗎?
例如。
1:
public async Task ProcessUploadedFile(FileInfo info, string contentType) { foreach (var something in someCollection) DoSomething(); DoSomethingElse(); await DoMethodAsync(); }2:
public Task ProcessUploadedFile(FileInfo info, string contentType) { foreach (var something in someCollection) DoSomething(); DoSomethingElse(); return DoMethodAsync(); }我最初寫的是前者,但不再看到添加等待的意義。如果我寫後者,我完成了同樣的事情,如果他們選擇這兩種方法的呼叫者仍然可以使用 await 關鍵字,不是嗎?
以上有什麼不同嗎?哪個更好”?
await用於在等待完成時繼續執行方法體。如果沒有什麼可以繼續的,那麼你就不需要等待。您可以將 await (簡化)視為
ContinueWith操作。所以,你的第一種方法是這樣的:foreach (var something in someCollection) DoSomething(); DoSomethingElse(); DoMethodAsync().ContinueWith(t => {});有一篇很好的 MSDN 文章描述了非同步方法中發生的事情,它有很好的程式碼流程圖:
