在C#中将锁转换为异步

时间:2014-08-03 21:59:46

标签: c# .net entity-framework locking async-await

如何将此单例方法转换为与async等效的方法?我想写这样的东西:public static async Task<DbContext> DBContext

public class ModelDB
{
    static DbContext _dbContext;
    readonly static object obj = new object();

    public static DbContext DBContext
    {
        get
        {
            lock (obj)
            {
                if (_dbContext == null)
                {
                    _dbContext = new MoviesDBEntities();
                }

                return _dbContext;
            }   
        }
    }
}

1 个答案:

答案 0 :(得分:2)

即使在lock方法内,你也可以(也可能应该)使用同步async,除非你期望lock比平常更长时间(我猜{{1}不应该超过几毫秒)。

当您确实需要异步锁定时,可以将new MoviesDBEntities();设置为1并调用SemaphoreSlim以异步方式等待:

WaitAsync

Here's一个实现示例。