audit.net - 什么是默认行为 InsertEvent 或 InsertEventAsync
问题描述
对于允许异步操作的数据提供者,是否使用标准的异步方法?
如果不是,我该如何神化这种行为?
解决方案
我不确定你所说的神化行为是什么意思,但大多数数据提供者都实现了同步和异步方法,例如FileDataProvider
:
https://github.com/thepirat000/Audit.NET/blob/master/src/Audit.NET/Providers/FileDataProvider.cs
但是,数据提供者的基类从虚拟异步方法中调用同步方法,因此如果自定义数据提供者不覆盖异步方法,它们只会在新任务中调用同步方法:
public virtual async Task<object> InsertEventAsync(AuditEvent auditEvent)
{
// Default implementation calls the sync operation
return await Task.Factory.StartNew(() => InsertEvent(auditEvent));
}
调用哪一个取决于上下文。如果你在 上调用Save()
orSaveAsync()
方法AuditScope
,它将分别调用同步或异步版本。Dispose()
/DisposeAsync()
方法也是如此。
考虑以下示例:
Audit.Core.Configuration.Setup()
.UseSqlServer(sql => sql....)
.WithCreationPolicy(EventCreationPolicy.InsertOnEnd);
using (var scope = AuditScope.Create("test", () => target, null))
{
target.Status = "Updated";
} // <---- Dispose() will call InsertEvent()
await using (var scope = await AuditScope.CreateAsync("test", () => target, null))
{
target.Status = "Updated";
} // <---- DisposeAsync() will call InsertEventAsync()
推荐阅读
- javascript - 为什么 forEach 在 Edge 中不起作用?
- android - 使用本机应用程序 (Android) 保护 Oauth2 中的身份验证代码
- leaflet - 我可以将 Google 地图图块/图像与传单一起使用吗?
- android - Kotlin RxJava2 onError 未调用 Http 状态代码 400
- javascript - 在浏览器调整大小后根据文本的长度和字体大小更改 div 的高度是个好主意吗?
- git - git 添加 . 从 .gitignore 添加文件
- python - 从另一个文件调用预编译模块
- java - UI Fragments View 等待 AsyncTask 终止并查看信息
- vba - 如何检查列中是否存在元素,然后在某个单元格中插入带有文本的正方形
- c++ - C++ 返回数组