我正在尝试将一段代码从 VS2010 C# 4.0 框架转换为 VS2008 VB.NET 3.5 框架。我非常不确定如何进行,因为我不熟悉 VB.NET 和 VS2008,而且我发现这两种环境之间的差异令人沮丧。我已经从原始 C# 中删除了大部分不相关的代码,希望提供一个可以从中指出解决方案的问题的干净示例。
我确实尝试了一些代码转换器,但 lambdas 使它们绊倒了。
For Each
我将第一个 lambda 转换为一个看起来不错的简单构造。然而,第二个 lambda(传递给ThreadPool.QueueUserWorkItem
调用)让我不确定。由于 lambda 正在使用在taskcount
lambda 主体之外声明的 var,因此我对使此代码对我的目标环境 (VS2008/VB.Net/3.5) 友好并保持代码尽可能相似的最佳方法犹豫不决原来的实现。除非没有其他方法,否则我不希望明确地将其推taskcount
入。WaitCallback
public void sendAndBlock(List<ISendable> msgs)
{
int taskCount = msgs.Count;
AutoResetEvent fini = new AutoResetEvent(false);
msgs.ForEach(m =>
{
ThreadPool.QueueUserWorkItem(nil =>
{
this.send(m);
//threadsafe decrement and if we have no tasks left then unblock.
if (0 == Interlocked.Decrement(ref taskCount))
{
fini.Set();//signal our main thread to proceed
}
}, m);
});
//block our main thread
fini.WaitOne();
}