如果您在體系結構的較低級別使用async/await,是否需要將異步/等待調用「泡沫化」到底,是否無效,因爲您基本上正在創建每個圖層的新線程(異步調用每個圖層的異步函數,還是它並不重要,並且只取決於您的偏好? 。EFasync/await的體系結構
我的倉庫是這樣的:
public class EntityRepository<E> : IRepository<E> where E : class
{
public async virtual Task Save()
{
await context.SaveChangesAsync();
}
}
現在我的業務層是這樣的:
public abstract class ApplicationBCBase<E> : IEntityBC<E>
{
public async virtual Task Save()
{
await repository.Save();
}
}
然後當然我在我的UI方法將有調用時遵循相同的模式。
是這樣的:
- 必要
- 負性能
- 只是一個偏好的事
即使這不是在單獨的層中使用/項目,同樣的問題適用如果我正在調用同一類中的嵌套方法:
private async Task<string> Dosomething1()
{
//other stuff
...
return await Dosomething2();
}
private async Task<string> Dosomething2()
{
//other stuff
...
return await Dosomething3();
}
private async Task<string> Dosomething3()
{
//other stuff
...
return await Task.Run(() => "");
}
請注意,您也可能會標記一條消息,例如您描述爲「異步」的消息以添加錯誤處理。如果您等待任務,則可以將調用包裝在「try/catch」塊中,而不是將延續添加到所提供的任務中。 – Servy 2013-03-19 15:47:49
@Servy:是的,但在這種情況下,它不符合提供額外處理的描述。在不改變API的情況下,你可以做到這一點很方便,因爲... – 2013-03-19 15:53:11
所以,試着理解它,如果在同一個函數中出現的東西需要返回異步,我才真正需要使用async/await方法?如果它是火,忘了或最後的聲明那麼就沒有必要等待了? – valdetero 2013-03-19 16:43:06