我希望结果总是1:
DECLARE @x datetime2
SELECT @x=GETDATE()
SELECT CASE WHEN @x>GETDATE() THEN 0 ELSE 1 END
Run Code Online (Sandbox Code Playgroud)
但它有时是1,有时是0.这怎么可能?
当我尝试通过其Closeable接口关闭套接字时,我得到一个异常:
new java.net.Socket().close();
// no error
((java.io.Closeable) new java.net.Socket()).close();
// Throws: java.lang.IncompatibleClassChangeError: interface not implemented
Run Code Online (Sandbox Code Playgroud)
这是为什么?问题仅出在Android设备上,而不是桌面上运行的Java程序.
public class MyDbContext : DbContext
{
....
static readonly object lockObject = new object();
public override int SaveChanges()
{
lock (lockObject)
return base.SaveChanges();
}
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
{
lock (lockObject)
return base.SaveChangesAsync(cancellationToken);
}
}
Run Code Online (Sandbox Code Playgroud)
我想在多个线程中使用DbContext,但是如果两个线程同时写入,则基础数据库有问题。所以我使用lockObject来防止同时出现两个SaveChanges()。
在SaveChanges()中可以正常工作,但是我不知道如何在SaveChangesAsync()中执行相同的操作。我认为上述解决方案是错误的。如何将锁应用于SaveChangesAsync?
谢谢!
android ×1
asynchronous ×1
c# ×1
interface ×1
java ×1
locking ×1
sockets ×1
sql ×1
sql-server ×1