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());

不会阻塞原来的调用线程,但它似乎并没有真正以异步方式执行。它看起来更像是将执行推迟到未来的某个时间点。