我在Windows 7 64位上在Eclipse(Indigo)中创建了一个"Hello World"Android项目.它使用Android SDK 1.6.
它从IDE构建而没有任何问题.
现在我想从命令行构建它.我发现了这个问题:在Eclipse中通过命令提示符或批处理文件 和带APT的Headless Building 打开eclipse项目,所以我运行了这个:
C:\inst\Android\eclipse>eclipsec.exe -data "C:\eclipsewsTest1" -application org.
eclipse.jdt.apt.core.aptBuild
Run Code Online (Sandbox Code Playgroud)
我得到的是以下内容:
Building workspace
Building '/And1'
Invoking builder on '/And1'.
Invoking builder on '/And1'.
Invoking 'Java Builder' on '/And1'.
Cleaning output folder for And1
Build done
Invoking builder on '/And1'.
Run Code Online (Sandbox Code Playgroud)
然后一个对话框显示此消息:
An error has occurred. See the log file C:\eclipsewsTest1\.metadata\.log
Run Code Online (Sandbox Code Playgroud)
此日志文件包含以下内容:
eclipse.buildId=M20110909-1335
java.version=1.7.0_01
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments: -product org.eclipse.epp.package.java.product -application org.eclipse.jdt.apt.core.aptBuild
Command-line arguments: -os …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚.NET 4.0的Enum.TryParse是否是线程安全的.
源代码(反编译)是:
[SecuritySafeCritical]
public static bool TryParse<TEnum>(string value, bool ignoreCase, out TEnum result) where TEnum : struct
{
result = default(TEnum); /// (*)
Enum.EnumResult enumResult = default(Enum.EnumResult);
enumResult.Init(false);
bool result2;
if (result2 = Enum.TryParseEnum(typeof(TEnum), value, ignoreCase, ref enumResult))
{
result = (TEnum)enumResult.parsedEnum;
}
return result2;
}
Run Code Online (Sandbox Code Playgroud)
对我来说似乎有问题的是这一行:
result = default(TEnum); /// (*)
Run Code Online (Sandbox Code Playgroud)
如果另一个线程在将其设置为默认值之后,并且在将其设置为已解析值之前访问结果,该怎么办?
[编辑]按照Zoidberg的回答,我想稍微改一下这个问题.
问题是,我想,如果Enum.TryParse是"事务性的"(或原子的).
假设我有一个静态字段,并将其传递给Enum.TryParse:
public static SomeEnum MyField;
....
Enum.TryParse("Value", out MyField);
Run Code Online (Sandbox Code Playgroud)
现在,当执行TryParse时,另一个线程访问MyField.TryParse会将MyField的值更改为SomeEnum的默认值一段时间,然后才会将其设置为已解析的值.
这不一定是我的代码中的错误.我希望Enum.TryParse能够将MyField设置为已解析的值,或者根本不触摸它,而不是将其用作临时字段.