Entity Framework 6 / SQL Server CE 4 SaveChangesAsync() 实体框架6/SQL Server CE 4 SaveChangesAsync()

3

我在我的应用程序中的非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上也没有。
1个回答

0
经过进一步测试,似乎我不应该在调用异步方法时使用await关键字。
像这样执行调用:
Task.Run(() => PerformContextSubmitAsync());

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接