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 上什么都没有。

Entity Framework 6 / SQL Server CE 4 SaveChangesAsync()

经过更多的测试,我似乎不应该在调用async方法时使用await关键字。

像这样执行调用:

Task.Run(() => PerformContextSubmitAsync());

不会阻止原始调用线程,但它似乎并没有以异步方式实际执行。 它的行为似乎更像是将执行推迟到未来的某个时间点。