- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试下面的代码,它有两个部分,一个是通过棱镜导航。当允许导航时,我会异步启动深度加载,但每次都有一个新的上下文。在后面的代码中,我想取消未完成此加载的挂起导航,但下面的代码甚至不起作用,所以取消是以后的事;-)
导航逻辑:这里没有问题
public void OnNavigatedTo(NavigationContext navigationContext)
{
int relatieId = (int)navigationContext.Parameters["RelatieId"];
if (_relatie != null && _relatie.RelatieId == relatieId) return;
loadRelatieAsync(relatieId);
}
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
bool navigationAllowed = true;
continuationCallback(navigationAllowed);
}
深度加载逻辑:
private async Task loadRelatieAsync(int relatieId)
{
try
{
await Task.Run(async () =>
{
_unitOfWork = _UnitOfWorkFactory.createUnitOfWorkAsync();
IEnumerable<Relatie> relaties = await getRelatieAsync(_unitOfWork, relatieId).ConfigureAwait(true);
_relatieTypeTypes = await getRelatieTypeTypesAsync(_unitOfWork, relatieId).ConfigureAwait(true);
_relatie = relaties.FirstOrDefault();
_unitOfWork.Dispose();
}).ConfigureAwait(true);
processRelatie(_relatie);
processRelatieTypes(_relatie, _relatieTypeTypes);
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
throw;
}
}
private async Task<IEnumerable<Relatie>> getRelatieAsync(IUnitOfWorkAsync unitOfWork, int relatieId)
{
IEnumerable<Relatie> relaties = null;
try
{
IRepositoryAsync<Relatie> relatieRepository = unitOfWork.RepositoryAsync<Relatie>();
relaties = await relatieRepository
.Query(r => r.RelatieId == relatieId)
.Include(i => i.BegrafenisOndernemer)
.SelectAsync()
.ConfigureAwait(false);
IRepositoryAsync<Adres> adresRepository = unitOfWork.RepositoryAsync<Adres>();
//exception is thrown after executing following line
var adressen = await adresRepository
.Query(r => r.RelatieId == relatieId)
.Include(i => i.AdresType)
.SelectAsync()
.ConfigureAwait(false);
_relatieTypeRepository = unitOfWork.RepositoryAsync<RelatieType>();
var relatieTypes = await _relatieTypeRepository
.Query(r => r.RelatieId == relatieId)
.SelectAsync()
.ConfigureAwait(false);
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);//exception is shown here
throw;
}
return relaties;
}
private async Task<IEnumerable<RelatieTypeType>> getRelatieTypeTypesAsync(IUnitOfWorkAsync unitOfWork, int relatieId)
{
IEnumerable<RelatieTypeType> relatieTypeTypes = null;
try
{
IRepositoryAsync<RelatieTypeType> relatieTypeTypeRepository =
unitOfWork.RepositoryAsync<RelatieTypeType>();
relatieTypeTypes = await relatieTypeTypeRepository
.Query()
.SelectAsync()
.ConfigureAwait(false);
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
throw;
}
return relatieTypeTypes;
}
我一直收到异常,就好像我忘记等待一样,但事实并非如此。每当我想在 GUI 线程上继续时,我也会正确地使用 configureawait(true) 。但是我在深度加载逻辑中不断收到这个错误。工作单元和存储库类也使用异步等待机制,但我也在适本地等待。
在上一个异步操作完成之前,第二个操作开始在此上下文中。使用“await”确保所有异步操作在调用此上下文的另一个方法之前已完成。不保证任何实例成员都是线程安全的。
编辑(删除记录器代码以减小代码大小)
最佳答案
问题是这段代码:
_unitOfWork = _UnitOfWorkFactory.createUnitOfWorkAsync();
IEnumerable<Relatie> relaties = await getRelatieAsync(_unitOfWork, relatieId).ConfigureAwait(true);
_relatieTypeTypes = await getRelatieTypeTypesAsync(_unitOfWork, relatieId).ConfigureAwait(true);
_relatie = relaties.FirstOrDefault();
_unitOfWork.Dispose();
UnitOfWork 是一个实例变量,当场景第二次开始时它会被新实例覆盖。已经执行的场景然后使用那个新的 UnitOfWork 而不是它自己的,因为它被覆盖了。不是那么容易发现,而是一个简单的竞争条件。我通过将所有实例变量替换为局部变量找到了它,然后问题就消失了。
关于c# - UOW - 在上一个异步操作完成之前,第二个操作在此上下文中开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28331244/
我有一个场景,其中单个节点上的所有处理程序都应该在调用所有处理程序后提交的单个“工作单元”上运行。我认为最好的方法是执行以下操作: 收到消息后,将这些操作作为管道的一部分执行: 创建新的 DbCont
我知道这已经被做过一百万次了,但我仍然在想走哪条路: EF - UoW/存储库 - 服务 - 网络或 EF - 服务 - 网络 似乎 UoW/Repository 层是多余的,因为您可以模拟 DbCo
我正在尝试下面的代码,它有两个部分,一个是通过棱镜导航。当允许导航时,我会异步启动深度加载,但每次都有一个新的上下文。在后面的代码中,我想取消未完成此加载的挂起导航,但下面的代码甚至不起作用,所以取消
这是关于我对从这里找到的一些 Entity Framework Material 的一些困惑: https://www.asp.net/ 在此页面上,它解释了如何使用存储库包装 dbcontext 以
我相信有人在其他地方问过这个问题,但我找不到直接的解决方案。我的 Api 正在传递对象模型,在服务器端,未传递的该对象的每个值都被视为 null(有意义)。有什么方法可以告诉 EF6 不要以不必编写每
我今天遇到了一个问题,我无法解决,我搜索了很多都没有找到解决方案,如果可以的话请帮助我。 我正在实现一个 MVC 应用程序,它使用 EF + 存储库模式 + 工作单元,并将 Autofac 作为依赖注
我正在编写一个标量 plpgsql 函数,其中包含一个在数据库外部具有副作用的 C 函数。当函数被调用时,在一些任意 SQL(触发、选择、写入等)中,我希望在 PostgreSQL 工作单元 (UOW
我有两个问题,第一个是缩放并在负载测试时变得可见。 在负载下,事情很快(10 个或更少并发)失败并出现错误: There is already an open DataReader associate
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
DbContext 的描述说:“一个 DbContext 实例代表了工作单元和存储库模式的组合......”。但是许多开发人员倾向于创建自己的存储库和 UoW。 我应该使用 DbContext和 Db
我正在使用 NHibernate、DI/IoC 和工作单元模式。 我见过的大多数 UoW 示例都确保在同一时间只能有一个事件的 UoW/ session ,例如 this one和 this one
但是你如何使用它? 我有一个 Code First项目设置,并使用这个新的 EF6 尝试一些东西。阅读至少 2 岁关于 EF4/5 的各种帖子/博客。但是关于 EF6 什么都没有。 假设我有这些实体:
作为 nHibernate 的新手,我发现 session 的创建有点令人困惑。 为什么 nHibernate 没有提供像(我相信)工作单元那样的东西? 或者是否已经构建了一些东西,而 UofW 更多
在 DDD 中,聚合根可以有一个存储库。让我们拿一个 订购 聚合和它的非持久对应 订单库 和持久的对应 下单 .我们还有 ProductVariant 跟踪订单中产品库存的聚合。它可以有一个 Prod
在许多基本示例中,我看到 using block 包裹在 DbContext 用法中,如下所示: using (var context = new MyDbContext()) { /
我的机器上部署了一个 Websphere 服务器,我正在返回: java.lang.NoClassDefFoundError:com.ibm.wsspi.uow.UOWManager 每当我查看在 W
我正在使用 MVC5 和 EF Code First 以及 Repository 和 Unit of Work 构建网络应用程序> 图案。到目前为止,我有 3 层: 包含存储库 UOW 的“数据层”。
最近我开始深入研究存储库模式和 UnitOfWork 的概念,同时探索 EntityFramework。 根据 MVC 示例制作了我自己的实现,他们在其中从 Controller 中处理 UnitOf
我刚刚开始阅读有关使用存储库和工作单元模式的内容。我目前正在尝试在 asp.net Web 表单应用程序中将它与 Entity Framework 一起使用。但是,我确实有一个问题,我不确定是否能够以
我是新来的 NHibernate我正在尝试为在 ASP.NET MVC 3 应用程序中使用引入通用存储库模式和工作单元。我用谷歌搜索标题并找到了新链接;但对我来说,所有这些都更复杂。我使用 Struc
我是一名优秀的程序员,十分优秀!