可能重复:
C#捕获的变量循环
我对多线程编程很陌生.当我运行下面的代码,只有最后一个孩子被执行.有人可以告诉我发生了什么吗?非常感谢你.
private void Process()
{
Dictionary<int, int> dataDict = new Dictionary<int, int>();
dataDict.Add(1, 2000);
dataDict.Add(2, 1000);
dataDict.Add(3, 4000);
dataDict.Add(4, 3000);
foreach (KeyValuePair<int, int> kvp in dataDict)
{
Console.WriteLine("Ready for [" + kvp.Key.ToString() + "]");
Task.Factory.StartNew(() => DoSomething(kvp.Value, kvp.Key));
}
private static void DoSomething(int waitTime, int childID)
{
{
Console.WriteLine("Start task [" + childID.ToString() + "]");
Thread.Sleep(waitTime);
Console.WriteLine("End task [" + childID.ToString() + "]");
}
}
Run Code Online (Sandbox Code Playgroud)
产量
Ready for [1]
Ready for [2]
Ready for [3]
Ready for [4] …Run Code Online (Sandbox Code Playgroud) 您好,我有一个通用的实用程序类,它将在类中记录一些信息,我将从不同的类中调用该类。应该如何声明我的 Nlog,以便我可以将记录器与不同的调用者分开。
我有以下示例,我希望 Nlog 将 Utilities 类生成的日志相应地保留在 CallerA 和 CallerB 记录器中,我是否应该将记录器引用传递给 Utilities 类?我听说在一堂课上保留一个记录器是一个很好的做法。
非常感谢您的建议=)
命名空间通用
{
公共课 公用事业
{
私有静态只读 Logger _logger = LogManager.GetCurrentClassLogger();
公共无效DoSomething()
{
_logger.Info("在此记录");
}
}
}
命名空间项目A
{
公共类来电者A
{
私有静态只读 Logger _logger = LogManager.GetCurrentClassLogger();
公共无效调用者方法()
{
新 Common.Utilities().DoSomething();
}
}
}
命名空间项目B
{
公共类 CallerB
{
私有静态只读 Logger _logger = LogManager.GetCurrentClassLogger();
公共无效调用者方法()
{
新 Common.Utilities().DoSomething();
}
}
}
我正在为C#设计数据库包装器.以下是我的两个选项:
选项A:
class DBWrapper:IDisposable
{
private SqlConnection sqlConn;
public DBWrapper()
{
sqlConn = new SqlConnection("my connection string");
sqlConn.Open();
}
public DataTable RunQuery(string Sql)
{
implementation......
}
public Dispose()
{
if(sqlConn != null)
sqlConn.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
选项B:
class DBWrapper
{
public DBWrapper()
{
}
public DataTable RunQuery(string Sql)
{
SqlConnection sqlConn = new SqlConnection("my connection string");
.....implementation......
sqlConn.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
对于选项,在实例化类时打开连接.因此,无论调用者调用RunQuery多少次,连接始终都准备就绪.但是如果应用程序在应用程序的早期实例化DBWrapper,那么在应用程序完成之前,连接将被打开并且什么都不做.此外,它可以在执行期间实例化许多DBWrapper.所以,这有点浪费资源.
对于选项B,它没有选项A具有的问题,但每次调用者调用RunQuery时都必须打开和关闭新连接.我不确定它会对性能有多大影响.
请分享您的专长.谢谢你的阅读.
我正在构建以下类来管理字典.
public class EnumDictionary<TKey, TValue>
{
private Dictionary<TKey, TValue> _Dict;
public EnumDictionary(Dictionary<TKey, TValue> Dict)
{
this._Dict = Dict;
}
public TKey GetValue(TValue value)
{
foreach (KeyValuePair<TKey, TValue> kvp in _Dict)
{
if (kvp.Value == value)
return kvp.Key;
}
throw new Exception("Undefined data type: " + value);
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误"运算符'=='不能应用于'TValue'和'TValue'类型的操作数".
顺便说一句,我正在制作这个自定义集合是因为我的字典具有独特的价值,但我无法从字典中获取密钥.
任何帮助表示赞赏.谢谢.