我在应用程序的非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的限制吗,还是我做的事真的很愚蠢?
对于这次搜索Google,我几乎找不到任何东西,因此一无所获。
最佳答案
经过更多测试后,我似乎不应该在他对await
方法的调用中使用async
关键字。
执行这样的调用:
Task.Run(() => PerformContextSubmitAsync());
不会阻塞原始的调用线程,但是它似乎实际上并没有以异步方式执行。它的行为似乎更像是将执行推迟到将来的某个时间点。