在以下两个片段中,第一个是安全的还是你必须做第二个?
安全我的意思是每个线程保证从创建线程的相同循环迭代中调用Foo上的方法?
或者你必须将引用复制到一个新的变量"local"到循环的每次迭代?
var threads = new List<Thread>();
foreach (Foo f in ListOfFoo)
{
Thread thread = new Thread(() => f.DoSomething());
threads.Add(thread);
thread.Start();
}
Run Code Online (Sandbox Code Playgroud)
-
var threads = new List<Thread>();
foreach (Foo f in ListOfFoo)
{
Foo f2 = f;
Thread thread = new Thread(() => f2.DoSomething());
threads.Add(thread);
thread.Start();
}
Run Code Online (Sandbox Code Playgroud)
更新:正如Jon Skeet的回答所指出的,这与线程没有任何关系.
我刚刚发现了函数编程风格,我相信它会减少开发工作,使代码更容易阅读,使软件更易于维护.然而,问题是我在说服任何人.
好吧,最近我有机会就如何减少软件开发和维护工作发表演讲,我想向他们介绍函数式编程的概念以及它如何使团队受益.我有这样的想法,即向人们展示两组完全相同的代码,一个以非常强制的方式编码,另一个以非常实用的方式编写,以表明函数式编程可以使代码更简单,更容易理解和因此可维护.是否有这样的例子,除了Luca Bolognese的着名的平方和例子?
我在C#中编写不可变二进制树的不同实现,我希望我的树从基类继承一些常用方法.
不幸的是,它从基类派生类是一败涂地缓慢.非派生类可以充分发挥作用.以下是两个几乎相同的AVL树实现,用于演示:
这两棵树具有完全相同的代码,但我在基类中移动了DerivedAvlTree.Insert方法.这是一个测试应用程序:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using Juliet.Collections.Immutable;
namespace ConsoleApplication1
{
class Program
{
const int VALUE_COUNT = 5000;
static void Main(string[] args)
{
var avlTreeTimes = TimeIt(TestAvlTree);
var derivedAvlTreeTimes = TimeIt(TestDerivedAvlTree);
Console.WriteLine("avlTreeTimes: {0}, derivedAvlTreeTimes: {1}", avlTreeTimes, derivedAvlTreeTimes);
}
static double TimeIt(Func<int, int> f)
{
var seeds = new int[] { 314159265, 271828183, 231406926, 141421356, 161803399, 266514414, 15485867, 122949829, 198491329, 42 };
var …Run Code Online (Sandbox Code Playgroud) 可以在生产系统中开始使用Iron Ruby和Iron Python吗?另外,托管它们还有其他要求吗?
而且,对于奖励积分,假设F#是一种与Python相同的函数式编程语言,那么在.NET框架中使用一个优于另一个是否有任何优势?
.net ironpython functional-programming dynamic-language-runtime
我只是听了Chris Smith关于F#的播客,其中他讨论了F#是如何使用C#/ VB.NET 以不同的方式处理问题的语言,而不是"推动"你的链" "数据转换",以及F#将如何"变得像XML",除了您选择的语言(C#或VB.NET)之外,您还可以使用它,以便以更有效的方式解决某些问题.
这让我想到了.NET语言的关系,这就是我理解它们的方式:
但是IronPython和IronRuby呢?Chris提到"F#从Ruby和Python中学到了很多东西",所以我认为F#与IronRuby/IronPython有类似的关系,而C#与VB.NET有关.然而,有点谷歌搜索告诉我IronRuby和IronPython都建立在DLR上,但F#不是.
如何最好地理解F#,IronRuby和IronPython之间的关系?
c# ×4
f# ×3
ironpython ×2
.net ×1
c#-3.0 ×1
closures ×1
enumeration ×1
inheritance ×1
ironruby ×1
performance ×1
vb.net ×1