Entity Framework 6 / SQL Server CE 4 SaveChangesAsync()
本文关键字:SaveChangesAsync CE Server Framework SQL Entity | 更新日期: 2023-09-27 17:56:28
我在应用程序中的非 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 更新中看到与调用SaveChangesAsync()
相吻合的"分块"效果。
基本上,这仍然阻塞了正在执行此操作的线程。这是SQL Server CE的限制还是我做了一些非常愚蠢的事情?
我能找到关于这个搜索谷歌的宝贵信息,而在 SO 上什么都没有。
经过更多的测试,我似乎不应该在调用async
方法时使用await
关键字。
像这样执行调用:
Task.Run(() => PerformContextSubmitAsync());
不会阻止原始调用线程,但它似乎并没有以异步方式实际执行。 它的行为似乎更像是将执行推迟到未来的某个时间点。