在 C# 中实现锁定的设计模式

Design pattern to implement Locking in C#

我的代码类似于:

private string TryOperation(Some parameters)
{
    using (var guard = new OperationGuardWithCleanup(params)) // Aquire lock
    {
        if (guard.TryStartOperation())
        {
            Operation(otherParams); // Actual operation method
            return "Success"
        }
        else
        {
            return "false";
        }
    }
}

我想提供实现可以任意使用的功能 "Operation"。是否有针对此类实用程序的推荐设计模式。

这是一种可以实现它的简单方法,您应该根据自己的目的对其进行测试和强化。您应该考虑您要实现的目标,因为这将同步您流程中的所有操作,这可能不是您想要的。

private string TryOperation(Action operation)
{
    using (var guard = new OperationGuardWithCleanup())
    {
        if (guard.TryStartOperation())
        {
            operation();
            return "Success";
        }
        else
        {
            return "false";
        }
    }
}

public class OperationGuardWithCleanup : IDisposable
{
    private bool disposedValue = false;
    private static readonly object _operationLock = new object();

    public OperationGuardWithCleanup()
    {
        Monitor.Enter(_operationLock);
    }

    public bool TryStartOperation()
    {
        // ?
        return true;
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!disposedValue)
        {
            if (disposing)
            {
                Monitor.Exit(_operationLock);
            }

            disposedValue = true;
        }
    }

    public void Dispose()
    {
        Dispose(true);
    }
}

如果我理解你的问题,那么使用委托(类似于 C++ 中的函数指针)可能会满足你的需要。

"Action" 类型是代表的不错选择。

private string TryOperation(Some parameters, Action<OtherParamsType> operation)
{
    using (var guard = new OperationGuardWithCleanup(params))
    {
        if (guard.TryStartOperation())
        {
            operation(otherParams); // Actual operation method
            return "Success"
        }
        else
        {
            return "false";
        }
    }
}