15
我已經做了一些閱讀,並認爲我已經掌握了關於System.Threading.Task的await和異步關鍵字的基礎知識。正在等待的任務:返回任務,或等待如果沒有代碼後等待
但是,我不確定我是否正確地處理了一個小問題,並且正在尋找驗證或有人來糾正我。
我執行異步方法,與此簽名:
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關鍵字(如果他們選擇的話),否?
以上是否有區別?哪個更好」?
大,這就是我的想法。謝謝! –
等一下。我能澄清一些事嗎?在我的代碼的重寫版本中,您在Task.Factory.StartNew()中有DoSomething()和DoSomethingElse()...是嗎?我認爲這些位將與調用者在同一線程上同步運行?這將是DoMethodAsync()。ContinueWith(t => {} _); ? –
@dark_perfect對不起,很匆忙。是的,你完全正確。更新代碼 –