- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 WPF 应用程序中使用 Entity Framework 6 (DbContext
),我想找到一种方法来正确取消 async
数据加载方法 ( ToListAsync
& FirstOrDefaultAsync
) 这样我就可以立即开始另一个请求。
我一直在努力坚持每个表单(在我的例子中是选项卡)标准的单一上下文,到目前为止,我一直在通过确保禁用 UI 来处理这些调用的非线程安全性质在请求期间,因此用户无法在处理过程中启动任何新请求。但是,我现在遇到了一个用例,这是不可能的。我需要在一些长时间运行的请求期间保持 UI 响应,为此,我需要一种方法来取消当前请求并立即启动另一个请求。
我尝试利用添加到 Async
方法的 CancellationToken
支持,但我发现当我取消请求时,它实际上并没有取消任何东西。它会正确抛出 OperationCanceledException
,但请求仍在进行中,当我尝试在此之后发出另一个请求时,我仍然得到 NotSupportedException(第二个操作在此上下文中启动.. .)
我正在使用更改跟踪,因此更改应用程序以对每个请求使用新的上下文是不现实的。
另外,我暂时解决了这个问题,方法是处理当前上下文并在每次此特定 View 模型发出请求时创建一个新上下文,而某个请求已经在进行中。这在技术上解决了我的问题,但我想知道是否有办法在保持相同上下文的同时做到这一点。
那么,有人有这方面的经验吗?我很难相信我是第一个遇到这个问题的人,但我在这里找到的所有其他类似问题的答案都建议我使用 CancellationToken
(这不起作用正确)或有点旧,不适用于 Async
方法。
编辑 1:
由于还没有人回答这个问题,我真的开始想知道我在这里有什么选择。一点背景。我正在将 Silverlight 应用程序转换为 WPF。Silverlight 应用程序使用带有 EF 4.1 的 WCF RIA 服务,但对于 WPF 应用程序,我们决定只使用 EF6.1。
使用 Silverlight 和 WCF,您一次可以进行的异步调用的数量没有限制,而且我们实际上对整个应用程序只有一个上下文(我知道这很糟糕,但是很简单,我们从来没有遇到过任何问题) .我们只是直接绑定(bind)到实体,并使用更改跟踪来保存用户所做的更改。
在现实世界的应用程序中,使用 EF 6.1 和 Async
方法,在 WPF 中是否没有办法做到这一点,有时,您只需要取消应用程序正在进行的操作在不崩溃和烧毁的情况下做用户想做的事?
最佳答案
暂时发布我的解决方案。我不是 super 粉丝,但我已经能够开始工作,不需要从头开始完全重写这个应用程序。
我现在正在使用 AsyncEx 中的 AsyncLock
类在访问或保存跟踪实体的存储库方法中。每个 DbContext 对象都使用自己的锁,因此我不会阻止来自其他上下文或未跟踪实体的其他调用。
例如,我的存储库中的 GetListAsync 方法:
public async virtual Task<IList<T>> GetListAsync(IDbContext context,
Expression<Func<T, bool>> where,
IOrderByClause<T>[] orderBy = null,
params Expression<Func<T, object>>[] navigationProperties)
{
using (await context.ContextLock.LockAsync())
{
IList<T> list = await GetListQuery(context, where, orderBy, navigationProperties).ToListAsync();
return list;
}
}
GetListQuery 使用导航属性以及 where 和 order by 子句创建查询。
我可能还会使用 CancellationToken 添加超时。
关于c# - 取消长时间运行的 Entity Framework 6 异步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32016500/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!