초기커밋
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
using NeoSmart.AsyncLock;
|
||||
|
||||
|
||||
using ServerCore; using ServerBase;
|
||||
|
||||
|
||||
using MASTER_GUID = System.String;
|
||||
|
||||
|
||||
namespace ServerBase;
|
||||
|
||||
public class EntityTransactionRunnerWithScopLock : IDisposable
|
||||
{
|
||||
private readonly EntityBase m_owner;
|
||||
private readonly MASTER_GUID m_transact_master_guid;
|
||||
|
||||
public EntityTransactionRunnerWithScopLock(EntityBase owner, string transactMasterGuid = "")
|
||||
{
|
||||
m_owner = owner;
|
||||
|
||||
m_transact_master_guid = transactMasterGuid;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (m_transact_master_guid.isNullOrWhiteSpace())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var master_guid = m_owner.getMasterGuid();
|
||||
if (m_transact_master_guid != master_guid)
|
||||
{
|
||||
Log.getLogger().error($"Not matched MasterGuid !!! - attachedMasterGuid:{master_guid} == settedMasterGuid:{m_transact_master_guid}");
|
||||
return;
|
||||
}
|
||||
|
||||
m_owner.detachMasterGuid();
|
||||
}
|
||||
|
||||
public async Task<T> tryInvokeWithAsyncLock<T>(Func<Task<T>> func)
|
||||
{
|
||||
var owner = getOwner();
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var result = default(T);
|
||||
var err_msg = string.Empty;
|
||||
|
||||
using (var releaser = await m_owner.getAsyncLock())
|
||||
{
|
||||
err_msg = $"AsyncLock() Start !!! - {m_owner.toBasicString()}";
|
||||
Log.getLogger().debug(err_msg);
|
||||
|
||||
if(false == m_transact_master_guid.isNullOrWhiteSpace())
|
||||
{
|
||||
ConditionValidCheckHelper.throwIfFalseWithCondition( () => true == m_owner.attachMasterGuid(m_transact_master_guid)
|
||||
, () => $"Failed to attach Master !!! : transactMasterGuid:{m_transact_master_guid} - {owner.toBasicString()}");
|
||||
}
|
||||
|
||||
result = await func();
|
||||
|
||||
err_msg = $"AsyncLock() End !!! - {m_owner.toBasicString()}";
|
||||
Log.getLogger().debug(err_msg);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public EntityBase getOwner() => m_owner;
|
||||
}
|
||||
Reference in New Issue
Block a user