アーキテクチャの下位レベルでasync/awaitを使用している場合、async / await呼び出しを最後まで「バブルアップ」する必要がありますか?基本的に各レイヤーに新しいスレッドを作成しているため、非効率的ですか(非同期呼び出し各レイヤーの非同期関数、またはそれは実際には重要ではなく、単にあなたの好みに依存していますか?
EFで非同期メソッドを使用できるように、EF6.0-alpha3を使用しています。
私のリポジトリはそのようなものです:
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(() => "");
}