我试图在for-each循环中设置User模型的一些属性,但是我一直在跟踪错误
无法调用远程函数x.token/0匹配 (elixir)src/elixir_fn.erl:9:匿名fn/3 in:elixir_fn.translate/3(stdlib)lists.erl:1353 :: lists.mapfoldl/3(elixir) )src/elixir_fn.erl:14 :: elixir_fn.translate/3
方法:
Enum.each(users, fn(user) ->
user.token = Comeonin.Bcrypt.hashpwsalt(to_string(user.id))
end)
Run Code Online (Sandbox Code Playgroud) 为什么我们可以在struct中使用静态循环引用而不是实例类型循环引用?
struct C
{
//following line is not allowed. Compile time error.
// it's a non static circular reference.
public C c1;
//But this line compiles fine.
//static circular reference.
public static C c2;
}
Run Code Online (Sandbox Code Playgroud) 这是msdn文章的摘录.文章可以在这里找到
有一个特殊的运行时线程专用于调用Finalize方法.当可释放队列为空(通常是这种情况)时,该线程会休眠.但是当条目出现时,此线程会唤醒,从队列中删除每个条目,并调用每个对象的Finalize方法.因此,您不应该在Finalize方法中执行任何代码,该方法对正在执行代码的线程做出任何假设.例如,避免在Finalize方法中访问线程本地存储.
这是我之前提出过的一个问题,我对于同样的说法没有投票,即Finalizable对象没有专用线程,而且我的信息源是错误的.如果本文解释的是真的,我想知道为什么CLR需要一个特殊的线程来调用Finalize方法?
最近在一次采访中,我正在解释我所研究的框架.我说我们通过使用模板方法设计模式提供可扩展性来创建控制反转.我说这是一个控制反转的例子,我们的框架调用框架用户实现的方法,面试官说模板方法设计模式不是IOC的一个例子.我想知道我对IOC的理解是否不正确?
我想知道当多个任务并行运行时,伪造长时间运行任务的最佳方法是什么.首先想到的是Thread.Sleep
public void FakeLongRunningTask()
{
Thread.Sleep(5000);
}
Run Code Online (Sandbox Code Playgroud)
但是上面代码的问题是调用Thread.Sleep会阻塞这个线程,这意味着它会放弃它的处理器时间片,所以在并行环境中调用Thread.Sleep的方法就好根本不调用它.因此,如果我并行运行三个任务,其中一个是调用Thread.Sleep,那么此任务对性能没有影响(尽管它可能会强制CLR生成更多线程!!!).但我想要的是伪造一个会影响整体表现的任务.
我正在阅读这篇文章,关于如何从现有的凤凰应用程序中提取微服务.作者重构了一个凤凰app控制器并将其中一个方法移动到Genserver,之后他将Genserver移动到一个单独的应用程序并在主项目中添加了一个依赖项.
但是我在这里有点困惑,因为GenServer只允许你有两个服务器回调(即句柄调用和句柄转换).但是,如果我想要一个功能作为微服务移出,我们最终会创建与该服务中涉及的端点一样多的Genserver,因为单个genserver将允许一个/两个方法调用.genserver是提取服务的理想方法吗?
最近我遇到的代码如下:
void CallThisInDifferentThreads(Return return)
{
var lock = "lock";
lock(lock)
{
//Do something here.
}
}
Run Code Online (Sandbox Code Playgroud)
我的第一反应是这段代码中的锁不起作用,因为我们正在创建锁并在同一方法中使用它.调用此方法的每个线程都有自己的锁副本,因此不会有同步.
但后来我意识到这应该有效,因为字符串转到字符串池,并且只有一个特定字符串的实例.我不确定我是否正确.