小编mar*_*cus的帖子

F#的异步如何真正起作用?

我想学习如何asynclet!工作在F#.我读过的所有文档都让人感到困惑.使用Async.RunSynchron运行异步块有什么意义?这是异步还是同步?看起来像是一个矛盾.

文档说Async.StartImmediate在当前线程中运行.如果它在同一个线程中运行,它对我来说看起来并不是异步......或者asyncs更像是协程而不是线程.如果是这样的话,他们什么时候退回?

引用MS文档:

使用let的代码行!开始计算,然后暂停线程直到结果可用,此时执行继续.

如果线程等待结果,我为什么要使用它?看起来像普通的旧函数调用.

Async.Parallel有什么作用?它接收一系列Async <'T>.为什么不能并行执行一系列普通函数?

我想我在这里缺少一些非常基本的东西.我想在我理解之后,所有文档和样本都将开始有意义.

f# asynchronous

34
推荐指数
3
解决办法
5768
查看次数

How can I print a variable name and its value without typing the name twice?

When you are debugging, it's very useful to do this:

var = calc()
print("var:", var)
Run Code Online (Sandbox Code Playgroud)

Is there any language where this is easy to do? In C and C++ you can use the stringify macro operator # and in Ruby I found this question:

Ruby - 打印变量名称,然后打印其值

使用符号:var和块的解决方案就是我想要的.

在D中,我使用了这个:

void trace(alias msg)() {
    writeln(msg.stringof ~ ":" ~ to!string(msg));
}
Run Code Online (Sandbox Code Playgroud)

但我不确定这是最好的方法,因为它只适用于简单的情况.我尝试了几种方法,但有时你可以得到字符串,但不是值(因为变量超出范围),或者你必须首先混合模板然后调用函数.

那么其他语言呢?蟒蛇?F#?嘘?Shell脚本(无论哪个shell)?Perl的?(我更喜欢远离Perl,tho).TCL?Lisp,Scheme?Java的?(Java不太可能这样做).

即使在我找到某种解决方案的语言中,它也适用于简单的情况.如果我想要打印任意表达式怎么办?

如果我正在设计一种语言,这个功能将是必备的.:-)

macros d metaprogramming

6
推荐指数
1
解决办法
858
查看次数

如何判断Java EE 6拦截器中的事务是否处于活动状态?

我打算为EJB编写拦截器,它基本上会做以下事情:

@AroundInvoke
public Object setContext(InvocationContext ctx) throws Exception {
    em.createQuery("... set something [database specific] ...").getSingleResult();
    try {
        return ctx.proceed();
    } finally {
        em.flush();
        em.createQuery("... unset something [database specific] ...").getSingleResult();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是如果将em.flush()应用于使用@TransactionAttribute(NOT_SUPPORTED)或@TransactionAttribute(SUPPORTS)(即只读方法)注释的方法,则会抛出异常,而使用默认@的方法可以正常工作TransactionAttribute(REQUIRED)(即更改数据库的方法).

有没有办法判断一个事务是否处于活动状态,以避免在当前没有事务正在运行时调用em.flush(),或者我必须创建两个拦截器,一个是em.flush(),一个是没有它?

我无法注入UserTransaction,因为bean使用容器管理的事务.EntityManager的(em)事务方法仅适用于resource_local事务,而不适用于JTA事务.我需要em.flush()调用以确保unset查询是最后运行的东西.

作为奖金问题,有谁知道我想做什么是某种不良做法?我知道拦截器在与bean相同的上下文中运行,因此通过数据库会话分享内容是安全的,但我必须非常小心在退出时取消设置所有内容,因为连接是在容器中汇集的.

transactions java-ee interceptor

6
推荐指数
1
解决办法
7962
查看次数