我有一个mongo(离线)数据库调用,它删除旧记录,然后从SQL(在线)数据库中插入新记录。我想锁定这个方法以防止竞争条件如下:
我知道锁定它的方法是使用Task.Wait()或Task.Result将所有异步方法转换为同步方法,然后使用c#lock方法将其锁定(https://msdn.microsoft.com/en-us/library/c5kehkcz.aspx )。但这是一个好习惯吗?
我试图遵循Stephen Cleary关于Asynch编程的最佳实践(https://msdn.microsoft.com/en-us/magazine/JJ991977.aspx),并希望让异步调用冒出来,这样就违背了上面提到的异步方法的建议解决方案同步方法以尝试将其包装在lock语句中。
以下是代码示例:
public async static Task SyncUserPermissionsForDocsAsync(List<long> docIdList)
{
var permissionListToSync = await OnlineDataAccess.GetPermissionListToSync(docIdList).ConfigureAwait(false);
await OfflineDataAccess.DropUserPermissionAsync(docIdList).ConfigureAwait(false);
await OfflineDataAccess.AddUserPermissionsAsync(permissionListToSync).ConfigureAwait(false);
}