如何将此单例方法转换为与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;
}
}
}
}
答案 0 :(得分:2)
即使在lock
方法内,你也可以(也可能应该)使用同步async
,除非你期望lock
比平常更长时间(我猜{{1}不应该超过几毫秒)。
当您确实需要异步锁定时,可以将new MoviesDBEntities();
设置为1并调用SemaphoreSlim
以异步方式等待:
WaitAsync
Here's一个实现示例。