小编Jos*_*lds的帖子

如何在C#中使进程(而不是线程)同步文件系统访问

今天早些时候我正在调试有点像这样的东西:

class Foo {

    void AccessCriticalSection() {
        try {
            if (IO.File.Exists("\\path\to\lock.txt")
                throw new Exception();
            System.IO.File.Create("\\path\to\lock.txt");
            criticalSection();          
        } catch (Exception ex) {
            // ignored
        } 
    }

    void CriticalSection() {
        // banana banana banana
        System.IO.File.Delete("\\path\to\lock.txt");
    }

}
Run Code Online (Sandbox Code Playgroud)

让我们甚至不知道这是多么可怕......但它本质上是试图使用一个名为lock.txtmutex 的文件.该操作不是原子操作,如果另一个进程正在使用它,其他进程只是没有通过关键部分(如果您可以相信它们,它们的目的是能够在锁定释放后继续)等等.显然它需要修复.

如何正确获取锁以跨多个进程同步对文件系统的访问?这些进程是同一进程的多个实例,因此它们可以共享一些协议而不是专门锁定目录(即,它们可以轻松地使用等同于某些类锁定的所有实例的东西,例如private final static Object lock = new Object();同步访问静态方法)

c# windows multithreading

4
推荐指数
1
解决办法
2265
查看次数

Java实用程序方法结合两个lambdas?

在.NET中,有一种简单的方法可以组合两个委托(.NET的lambda版本).

基本上,你有:

LambdaType f1 = (a, b) => doSomething(a, b);
LambdaType f2 = (a, b) => doSomethingElse(a, b);
LambdaType combined = System.Delegate.Combine(f1, f2); 
// combined is equiv to: (a, b) => { f1.invoke(a, b); f2.invoke(a, b);};
Run Code Online (Sandbox Code Playgroud)

在Java中是否有这样的结合两个lambdas?什么都没想到.它是一个不错的小实用程序,虽然说实话上并不太难以定义只调用两个(或更多)的第二个lambda.

java lambda java-8

4
推荐指数
1
解决办法
610
查看次数

是否存在修改标识符命名的约定,否则这些标识符将成为Java中的关键字?

例如,您可能会执行以下操作:

public final class Library {
    public void checkOut(Book book) { /* banana banana banana */ }
    public void return_(Book book) { /* banana banana banana */ }
}
Run Code Online (Sandbox Code Playgroud)

但Java程序员应该遵循一个实际约定吗?

java

3
推荐指数
1
解决办法
70
查看次数

Java/IntelliJ 将类保存在另一个文件夹中,但在同一个包中

有没有办法将您的类分开放在不同的文件夹中而不将它们放在不同的包中?

我有大约 40 个类的集合,我确实希望它们都在同一个包中,但我想要一种方法来直观地对它们进行分组,这样随着规模的增长,导航会更容易一些。

有没有办法用 IntelliJ 做到这一点?在一般的Java中?

我不想要子包的原因如下:

Foo在包中Foo

package Foo;
public class Foo {
    public static void main(String[] args) {
        Bar.FooBar(); //<--compile error
    }
}
Run Code Online (Sandbox Code Playgroud)

Bar在包中Foo.Bar

package Foo.Bar;

public class Bar {
    static void FooBar() {}
}
Run Code Online (Sandbox Code Playgroud)

java intellij-idea

3
推荐指数
1
解决办法
2970
查看次数

为什么 String.intern() 是本机方法?

使这种方法成为本机方法背后的逻辑是什么?

与仅使用哈希映射制作实习字符串池相比有什么优势?

看起来有点奇怪,但似乎在非本机代码中很容易做到:

import java.util.HashMap;

public class String {

    // ...

    private final static HashMap<String, String> pool = new HashMap<>();

    public String intern() {

        if (pool.containsKey(this))
            return pool.get(this);

        synchronized (pool) {
            if (pool.containsKey(this))
                return pool.get(this);
            pool.put(this, this);
            return this;
        }

    }

    // ...

}
Run Code Online (Sandbox Code Playgroud)

那么为什么它是本机代码呢?

java

3
推荐指数
1
解决办法
648
查看次数

为什么在null事件引用上调用+运算符会初始化一个事件?

我在这里错过了什么吗?如何通过运算符更改null事件引用?

class Foo
{

    public event EventHandler<EventArgs> anEvent;
    public Foo()
    {
        Console.WriteLine(anEvent == null); // true
        anEvent += (sender, args) => { var i = 0; };
    }

    public static void Main(String[] args)
    {
        var a = new Foo();
        Console.WriteLine(a.anEvent == null); // false
        Console.ReadKey();
    }

}
Run Code Online (Sandbox Code Playgroud)

c#

3
推荐指数
1
解决办法
56
查看次数

为什么Java 8不允许接口成员是私有的?

虽然有些人之前已经问过这个问题,但是在Java 8发布之前.

以前,不允许使用静态成员,因为实现细节未在接口中定义.这也是为什么没有什么应该是私有的,因为接口的实现者需要提供实现细节.

这种用Java 8改变了,不是吗?默认方法定义实现细节,静态方法也是如此.那么,为什么仍然不允许这样做?

java

2
推荐指数
1
解决办法
96
查看次数

超级简单的C#if/else语法语义,即你应该使用大括号的一个很好的例子

SE,

我已经习惯了Java语法,最近不得不在工作时切换到C#.我有点困惑为什么我写的if/then/else语句之一没有按预期工作,并且想知道是否有人能够告诉我一些关于语法细节的信息为什么这不符合预期.

采取:

if (salePredicate != null)
    if (!salePredicate.Invoke(s))
        continue;
else
    _sales.Add(s);
Run Code Online (Sandbox Code Playgroud)

在此块中,else当salePredicate为null时,未达到该语句.然而,

if (salePredicate != null) {
    if (!salePredicate.Invoke(s))
        continue;
} else
    _sales.Add(s);
Run Code Online (Sandbox Code Playgroud)

将达成else声明.为什么第一个声明没有效?

(PS,我知道以下是一个选项)

if (salePredicate == null ||
    salePredicate.Invoke(s))
    _sales.Add(s);
Run Code Online (Sandbox Code Playgroud)

更新:声明1确实是:

if (salePredicate != null)
    if (!salePredicate.Invoke(s))
        continue;
    else
         _sales.Add(s);
Run Code Online (Sandbox Code Playgroud)

使用牙套,kiddos.

c#

1
推荐指数
2
解决办法
291
查看次数

为什么此SQL查询排序错误?

我正在运行以下查询以按字母顺序"重新排序"更新的表.有一个名为nOrder的列应该按顺序排列.我正在更新该列,如下所示:

(编辑:忘了包含AND @zone = zone在我的问题中,但同样的问题正在发生)

UPDATE Zones
SET nOrder = 0 WHERE stateKey = @key

DECLARE @zone INT
SET @zone = 1
DECLARE @i INT
SET @i = 1

WHILE @zone < 4
    BEGIN
        WHILE EXISTS (SELECT TOP 1 cDisplay FROM Zones WHERE stateKey = @key AND zone = @zone AND nOrder = 0)
            BEGIN
                UPDATE Zones
                SET nOrder = @i
                WHERE cDisplay = (SELECT TOP 1 cDisplay FROM Zones WHERE stateKey = @key AND zone = @zone …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

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

为什么FxCop会给我一个"DoNotCastUnnecessarily"警告?

我有以下内容:

Option Strict On
Public NotInheritable Class Root
    Public Overrides Function Equals(obj As Object) As Boolean
        If TypeOf obj Is Root Then
            Dim rt As Root = DirectCast(obj, Root)
            Return rt.container.Equals(Me.container) AndAlso
                rt.question.Equals(Me.question)
        End If
        Return False
    End Function
End Class
Run Code Online (Sandbox Code Playgroud)

FxCop正在给我这个警告:

Warning, Certainty 95, for DoNotCastUnnecessarily
{
    Target       : #Equals(System.Object)  (IntrospectionTargetMember)
    Location     : file:///C:/..../Root.vb<46>  (String)
    Resolution   : "'obj', a parameter, is cast to type 'Root' multiple 
                   times in method 'Root.Equals(Object)'. Cache the result 
                   of the 'as' operator or direct …
Run Code Online (Sandbox Code Playgroud)

.net vb.net fxcop

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

在VB.NET中禁止警告

所以,我写了一些VB.NET代码.有点像这样:

Public Function foo() As Object
    Select(someInt)
        Case 1
        Case 2
        Case 3
            return doStuff()
        Case Else
            Throw New ArgumentException("Can't supply that argument to this method.")
    End Select
End Function
Run Code Online (Sandbox Code Playgroud)

这是很好的代码.如果有人将无效参数传递给使用此代码段的方法,它会告诉他们确切的错误位置和原因,他们可以立即修复它.但是......它"不会在每个代码路径上返回一个值." 我怎么能压制这个警告?

我想在其他方法上提供此警告,但不在此方法上.

警告信息:

vb.net

0
推荐指数
1
解决办法
297
查看次数

标签 统计

java ×5

c# ×3

vb.net ×2

.net ×1

fxcop ×1

intellij-idea ×1

java-8 ×1

lambda ×1

multithreading ×1

sql ×1

sql-server ×1

windows ×1