mxm*_*ile 6 .net c# nhibernate async-await
鉴于此代码:
private ISession _session;
public async Task<T> GetAsync<T>(int id) where T : ISomeEntity
{
//how to call and return _session.Get<T>(id) asynchronous
}
Run Code Online (Sandbox Code Playgroud)
可以ISession.Get<T>()异步调用NHibernate 吗?可取?不值得?
Onu*_*mus 13
NHibernate默认情况下不支持实体框架意义上的异步等待.但是,建议这样做(如果可以的话),因为数据库调用是IO调用,这是使其异步的非常好的候选者.因此,在等待来自DB的响应时,您的线程将返回池而不是挂起,它将使您的应用程序更具可伸缩性.现在来到异步支持.我已经将NHibernate分叉了.在我称为NHibernateX的fork中,有AsAs方法,如GetAsync,ListAsync,ToListAsync等.这里是source和nuget包:
https://github.com/ReverseBlade/nhibernate-core
https://www.nuget.org/packages/NHibernateX/
如果底层操作ins't以某种方式(即已经异步async-await,BeginXXX/ EndXXX等)有一个在添加没有价值async围绕它包装.
async在两种情况下有用:可扩展性和响应性.执行async过度同步根本不会对可伸缩性有帮助,而且响应性可以简单地用于在需要时Task.Run将该工作卸载到另一个ThreadPool线程,而不是添加专用方法.
private ISession _session;
public async Task<T> GetAsync<T>(int id) where T : ISomeEntity
{
return await _session.GetAsync<T>(id);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6976 次 |
| 最近记录: |