Entity Framework 6 / SQL 服务器 CE 4 SaveChangesAsync()
Entity Framework 6 / SQL Server CE 4 SaveChangesAsync()
我在我的应用程序中的非 GUI 线程中有以下方法 运行:
private async Task PerformContextSubmitAsync()
{
try
{
await DataContextProvider.GetDefaultContext().SaveChangesAsync();
}
catch (Exception ex)
{
Log.Error("Error performing context submit", ex);
}
}
这样称呼:
await PerformContextSubmitAsync();
该应用程序是基于 WPF/Prism 的应用程序,因此我还发布事件以更新 GUI 中的进度条和文件数,例如:
_eventAggregator.GetEvent<DatabaseProgressEvent>().Publish(new DatabaseProgress(percentDone));
一切都按预期工作接受我仍然在 UI 更新中看到 "chunking" 效果,与对 SaveChangesAsync()
.
的调用一致
基本上这仍然阻塞了正在执行的线程。这是 SQL Server CE 的限制还是我在做一些非常愚蠢的事情?
关于这次搜索我找不到什么宝贵的东西 Google 而在 SO 上什么也找不到。
经过更多测试后,我似乎不应该在调用 async
方法时使用 await
关键字。
像这样执行调用:
Task.Run(() => PerformContextSubmitAsync());
不会阻塞原来的调用线程,但它似乎并没有真正以异步方式执行。它看起来更像是将执行推迟到未来的某个时间点。
我在我的应用程序中的非 GUI 线程中有以下方法 运行:
private async Task PerformContextSubmitAsync()
{
try
{
await DataContextProvider.GetDefaultContext().SaveChangesAsync();
}
catch (Exception ex)
{
Log.Error("Error performing context submit", ex);
}
}
这样称呼:
await PerformContextSubmitAsync();
该应用程序是基于 WPF/Prism 的应用程序,因此我还发布事件以更新 GUI 中的进度条和文件数,例如:
_eventAggregator.GetEvent<DatabaseProgressEvent>().Publish(new DatabaseProgress(percentDone));
一切都按预期工作接受我仍然在 UI 更新中看到 "chunking" 效果,与对 SaveChangesAsync()
.
基本上这仍然阻塞了正在执行的线程。这是 SQL Server CE 的限制还是我在做一些非常愚蠢的事情?
关于这次搜索我找不到什么宝贵的东西 Google 而在 SO 上什么也找不到。
经过更多测试后,我似乎不应该在调用 async
方法时使用 await
关键字。
像这样执行调用:
Task.Run(() => PerformContextSubmitAsync());
不会阻塞原来的调用线程,但它似乎并没有真正以异步方式执行。它看起来更像是将执行推迟到未来的某个时间点。