【发布时间】:2012-12-24 00:42:11
【问题描述】:
我有以下方法:
while (TryCount < 2)
{
Lock.Try<object>(inCommandObj.Connection, _timeout, delegate(DataSet ds)
{
dataAdapter = new OdbcDataAdapter(inCommandObj);
returningObj = dataAdapter.Fill(ds);
done = true;
return returningObj;
});
if (done)
break;
inCommandObj.Cancel();
}
您可以看到我试图将一个 DataSet 传递给这个匿名方法,但它不喜欢它?我怎样才能做到这一点?
祝福
编辑 1:异常消息现在是:Delegate 'System.Func' 不接受 1 个参数
编辑 2:在这种情况下,我需要使用 dataAdapter.Fill 方法填充现有数据集。这必须使用锁(带 timout)来完成,因为会有很多线程运行此方法。如果锁定超时,我需要取消当前已经冻结的 MySQL 命令,然后尝试发送新命令(1 次)。
编辑 3:这就是锁类的样子:
public static class Lock
{
public static T Try<T>(object objLock, int timeout, Func<T> f)
{
if (System.Threading.Monitor.TryEnter(objLock, timeout))
{
try
{
return f.Invoke();
}
finally
{
System.Threading.Monitor.Exit(objLock);
}
}
return default(T);
}
public static void Try(object objLock, int timeout, Action f)
{
if (System.Threading.Monitor.TryEnter(objLock, timeout))
{
try
{
f.Invoke();
}
finally
{
System.Threading.Monitor.Exit(objLock);
}
}
}
}
【问题讨论】:
-
“它不喜欢它”对问题的描述相当糟糕。发生什么了?错误信息是什么?
-
你想做什么?你的代码伤害了我的眼睛。也许,如果你写你想做的事,有人可以给你一个更好的解决方案。
-
如果您只是立即重新分配
ds,为什么还要传递它? -
什么是
TryCount,为什么这不是无限循环? -
你还没有写出你想要做什么,不管你用锁和监视器做什么都是非常危险的。
标签: c# .net anonymous-methods